Мы регулярно испытываем странные проблемы с сетью на нашем выделенном сервере. Он работает под управлением Windows Server 2012 R2 x64 на Xeon E5620 с 16 ГБ ОЗУ и сетевым адаптером Intel 82575EB.
Обратите внимание, что мы уже настроили HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
ключевые ценности TcpTimedWaitDelay
и MaxUserPort
до 30 и 65530 соответственно.
В произвольный момент времени наши веб-сайты перестают отвечать на запросы, потому что они не могут подключиться к локальной базе данных. Когда эти проблемы начнут проявляться, это будет примерно 2 недели безотказной работы. Системный журнал начинает получать предупреждения TCPIP 4227 и 4231. В нем говорится: «Запрос на выделение временного номера порта из глобального пространства портов TCP не удался из-за того, что все такие порты используются».
Если я сбегу
Get-Counter -Counter \TCPv4\*
или
Get-Counter -Counter \TCPv6\*
или
netstat -abn | find /c ":"
Я всегда получаю разумное значение в 500-1500 подключений, что даже близко не к пределу в 65К.
Кроме того, localhost перестает локально разрешаться в :: 1, возвращаясь к 127.0.0.1
Только принудительный перезапуск машины может разрешить ситуацию.
Может быть проблема с сетевым адаптером?
ОБНОВЛЕНИЕ 1
Это случилось снова и, похоже, было решено, когда я перезапустил почтовый сервер. Как ни странно, все счетчики показали ~ 1000 подключений, из которых ~ 500 в данный момент активны, и все же ошибка сокета 10055 при попытке подключиться к базе данных, которая не имеет ничего общего с почтовым сервером.
ОБНОВЛЕНИЕ 2 Это странно, но ежедневный перезапуск почтовых служб полностью решает проблему.
У меня была аналогичная проблема с исчерпанным пулом портов TCP / IP на WinSvr 2012R2 x64 в течение почти 1 месяца, когда сервер перестал получать любые новые и TCP-соединения. Итак, я поигрался со значениями реестра, и они для меня стабильны:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e
"MaxUserPort"=dword:0000fffe
"TcpNumConnections"=dword:00fffffe
"TcpMaxDataRetransmissions"=dword:00000005
В результате такой же, как у вас. Я думаю, вам следует подумать об аудите вашего поведения при работе ваших приложений / скриптов. Если все в порядке и ничего не помогает, вы можете попробовать поставить прокси-сервер перед сервером веб-приложений, создать 2 узла с веб-сервером (IIS, Apache, ...), которые будут совместно использовать один и тот же статический контент и одновременно обращаться к одной и той же базе данных. время (если у вас достаточно ресурсов в вашей компании).
Может быть, эта статья вам чем-то поможет: http://blogs.technet.com/b/tristank/archive/2008/03/11/maxuserport-what-it-is-what-it-does-when-it-s-important.aspx
В дополнение к настройкам драйвера Tcpip, диапазон эфемерных TCP-портов управляется в Windows Server с помощью сетка команда (источник).
Ты можешь Посмотреть динамический диапазон портов с помощью следующих команд:
netsh int ipv4 show dynamicport tcp
netsh int ipv4 show dynamicport udp
netsh int ipv6 show dynamicport tcp
netsh int ipv6 show dynamicport udp
Чтобы изменение диапазон портов, используйте эту команду:
netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=number num=range
Например:
netsh int ipv4 set dynamicport tcp start=49152 num=16384
Настройка (start =49152 число =16384) также является дефолт на Windows Server 2008 и новее.
Была такая же проблема на Windows Server 2016 запуск большого количества тестов Selenium с использованием chromewebdriver. Этот сценарий PS автоматически настроит параметры, указанные выше @Myke. В shutdown
Команда была добавлена, поскольку для изменений стека TCP требуется перезагрузка.
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name MaxUserPort -Value 65534 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpTimedWaitDelay -Value 30 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpNumConnections -Value 16777214 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpMaxDataRetransmissions -Value 5 -Force | Out-Null
shutdown -r -t 0
Это было сообщение об ошибке, которое мы получили Webdriver.Quit()
сообщая нам, что используется адрес TCP.
ошибка: EADDRINUSE подключите EADDRINUSE 127.0.0.1:12843 по ClientRequest. (\ node_modules \ selenium-webdriver \ http \ index.js: 238: 15)
Из: Задача: WebDriver.quit ()
Вы убедились, что не происходит утечка объектов подключения к базе данных? Вы должны закрыть каждое открытое соединение с базой данных либо явно (с помощью try-finally), либо с помощью блока using {}. Это распространенная проблема, о которой ASP не сообщает вам напрямую.