Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

Event ID 4227 Windows Server, AD и Роли

Event ID 4227: исчерпание динамических портов TCP/IP — решение

Обновлено: 28.08.2026 · Официальная документация ↗

Симптомы исчерпания портов TCP (Event ID 4227)

В журнале System фиксируется предупреждение Event ID 4227: TCP/IP failed to establish an outgoing connection because the selected local endpoint was recently used to connect to the same remote endpoint. This error typically occurs when outgoing connections are opened and closed at a high rate.

СимптомПоследствия
Отказ создания исходящих соединенийСервер не может подключиться к SQL, внешним API или контроллеру домена
Ошибки в IIS и прокси-серверахОшибка 502 Bad Gateway / 504 Gateway Timeout из-за нехватки портов
Тысячи сокетов в состоянии TIME_WAITИсчерпание пула эфемерных портов операционной системы

Пошаговое устранение исчерпания портов (Event ID 4227)

Данная проблема возникает при открытии огромного количества короткоживущих TCP-соединений. После закрытия порт остается заблокированным в состоянии TIME_WAIT на 4 минуты (240 секунд).

  1. Уменьшите время удержания закрытых портов (TcpTimedWaitDelay): сократите время ожидания со стандартных 240 секунд до 30 секунд:
# Сокращение времени TIME_WAIT до 30 секунд через реестр:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name "TcpTimedWaitDelay" -Value 30 -Type DWord -Force
  1. Расширьте диапазон динамических (эфемерных) портов: увеличьте количество доступных клиентских портов до максимальных значений:
# Проверка текущего диапазона портов:
netsh int ipv4 show dynamicport tcp

# Расширение диапазона динамических портов (с порта 10000 по 65535 - 55535 портов):
netsh int ipv4 set dynamicport tcp start=10000 num=55535
netsh int ipv6 set dynamicport tcp start=10000 num=55535
  1. Включите повторное использование портов SYN (MaxUserPort):
# Добавление параметра MaxUserPort в реестр:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name "MaxUserPort" -Value 65534 -Type DWord -Force
  1. Найдите приложение, создающее утечку сокетов:
# Поиск процесса с наибольшим числом открытых соединений:
Get-NetTCPConnection | Group-Object -Property OwningProcess | Sort-Object Count -Descending | Select-Object -First 5 Count, @{N="ProcessName";E={(Get-Process -Id $_.Name).ProcessName}}, @{N="PID";E={$_.Name}}

Для разработчиков: Если утечку создает ваше .NET / C# приложение, используйте пул соединений (HttpClientFactory) вместо создания нового экземпляра new HttpClient() на каждый запрос.

💡 Практика специалистов: Event 4227 часто возникает на веб-серверах IIS с проксированием (ARR) или микросервисах. Снижение TcpTimedWaitDelay до 30 и расширение портов до 55000 полностью ликвидирует ошибку без покупки дополнительного оборудования.

Частые вопросы (FAQ)

Сколько динамических портов доступно в Windows Server по умолчанию?

По умолчанию диапазон начинается с порта 49152 и заканчивается на 65535 (всего 16384 порта).

Что такое состояние TIME_WAIT?

Это защитный интервал протокола TCP, гарантирующий, что запоздавшие пакеты предыдущего соединения не будут ошибочно приняты новым соединением на тех же портах.

Требуется ли перезагрузка после изменения netsh dynamicport?

Изменения netsh вступают в силу немедленно для новых процессов, однако для параметров реестра TcpTimedWaitDelay рекомендуется перезагрузить сервер.

Как быстро посчитать количество активных соединений на сервере?

Выполните команду: (Get-NetTCPConnection).Count в консоли PowerShell.

Полезные материалы
Рекомендуем