1

Я получаю сообщение об ошибке исчерпания порта на моем сервере («Обычно разрешено только одно использование каждого адреса сокета (протокола / сетевого адреса / порта)»).

Итак, я проверил с помощью netstat -n, и он перечисляет около 84000 соединений.

Исходя из локального порта и того факта, что внешний IP-адрес принадлежит мне, я могу видеть, что, например, 3654 из них относятся к программе, работающей на том же сервере, который я убил более 24 часов назад (фактически вчера утром). Все они находятся в состоянии TIME_WAIT на внешних портах между 49165 и 65533. По крайней мере, некоторые из тех же номеров внешних портов также отображаются как локальные порты, например:

TCP    <my_ip>:14046  <my_ip>:49165  TIME_WAIT
...
TCP    <my_ip>:49165  <other_ip>:80  TIME_WAIT

14046 - это порт, который прослушивает программа на моем сервере и которую программа, которую я убил вчера, использовалась для многократного подключения. host <other_ip> дает мне что-то на compute-1.amazonaws.com , я не узнаю IP. Я не могу получить что-нибудь из моего браузера. Поэтому я не могу понять, что на этой машине подключилось бы к 80-му порту, но в последнее время на одной и той же машине работают различные вещи, которые используют веб-сервисы, поэтому я думаю, что это может быть перенаправление или аналог из тех.

Отдельные прогоны netstat с интервалом более 4 минут показывают, что оба соединения остаются в списке.

Это ожидается? Я думал, что сокеты должны были окончательно закрыться через 4 минуты или около того, но обычно ли netstat перечисляет их намного дольше? Эти порты действительно заняты, и если да, то что я могу сделать, чтобы освободить их? Желательно без перезагрузки, но если придется, то придется.

ОС Windows Server Enterprise, работающая на виртуальной машине Rackspace.

[Редактировать: хм, я должен был спросить об этом на сервере?]

[Другое редактирование: перезагрузка, казалось, исправила это. Все старые соединения исчезли, а новые соединения того же типа исчезли через несколько минут, как и ожидалось. Поэтому я бы предположил, что сетевой стек каким-то образом попал в неисправное состояние.]

1 ответ1

0

Взгляните на следующую статью от Microsoft: как избежать исчерпания портов TCP/IP.

Одно из предложений - проверить настройки реестра для ключа TcpTimedWaitDelay в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters. Эта запись контролирует «промежуток времени, в течение которого соединение остается в состоянии TIME_WAIT, когда соединение закрывается». Возможно, вы получили какое-то очень длинное значение ... по умолчанию это 240 секунд.

Кроме того, вы можете проверить и посмотреть, можете ли вы отследить и посмотреть, какие процессы вызывают подключения TIME_WAIT, и посмотреть, есть ли в нем параметр конфигурации для более быстрого закрытия портов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .