2012-04-19 3 views
3

У меня возникла ситуация, когда я натыкаюсь на эфемерное истощение порта, которое затем вызывает исключения. Я хотел бы отключить соединения, чтобы избежать этого. Есть ли способ определить количество используемых эфемерных портов?Как найти количество используемых эфемерных портов?

Спасибо, Erick

+0

Если вы отслеживать, сколько открыл приложение, это будет хорошим приближением первого уровня. У меня есть серьезные сомнения в том, что вы столкнулись с изнурительным истощением порта, поскольку UDP и TCP отслеживают сеансы через (локальный ip, peer ip, локальный порт, удаленный порт) - любой один порт может использоваться для сотен тысяч подключений к нескольким сверстникам или сотням тысяч сверстников. Проверьте вывод «netstat» или эквивалент вашей платформы «netstat», чтобы отладить это, прежде чем смотреть в код, чтобы обойти это. Возможно, файл-дескриптор или ограничение сокета более вероятны. – sarnold

+1

Мы столкнулись с этой ситуацией на Azure, используя хранилище Azure от Azure VM. Мы подтвердили, что это ошибка эфемерного порта из-за ошибки. Кроме того, увеличение предела (от 5k -> 2k) и сокращение времени повторного использования решает проблему. Проблема в том, что мы не хотим делать это на каждой виртуальной машине. –

+0

Azure не по умолчанию повторно использует существующие соединения ??? – sarnold

ответ

1

Единственный способ вы можете запустить из временных портов TCP, если вы являетесь клиентом, и вы открыли почти 64k исходящих соединений, и не закрыл их в течение последних двух минут.

Это иногда случается в сценариях тестирования, но это не представляет собой реальный случай, так что это не представляет никакого реального интереса.

Символ этого является ошибкой связи при подключении. Если вы не получаете ошибки связи, у вас нет этой проблемы.

+3

Мы столкнулись с этой ситуацией на Azure, используя хранилище Azure от Azure VM. Мы подтвердили, что это ошибка эфемерного порта из-за ошибки. Кроме того, увеличение предела (от 5k -> 2k) и сокращение времени повторного использования решает проблему. Переход на лазурное хранилище от Azure VM использует очень близкое (1 хп) соединение 10 GigE. Каждая операция хранения использует новое TCP-соединение. По умолчанию окна только резервируют 5k портов для эфемерных портов. Мы можем увеличить его, но для этого требуются изменения реестра и перезагрузки. Когда я приблизился к пределу, я бы сильно задушил. –

1

Чтобы получить список открытого соединения, вы можете использовать команду netstat. Вопреки популярному мнению (из других ответов) число портов Ephemeral ограничено (4000 в Windows 2003, около 16000 в более поздних версиях, 16000 на большинстве Linux). Обратите также внимание, что для освобождения порта требуется 4 минуты, как только он станет неиспользованным, поэтому это может быть проблемой.

Существует статья на MSDN дело с этим: http://msdn.microsoft.com/en-us/library/aa560610(v=bts.20).aspx

Смежные вопросы