Как убить Windows Zombie TCP соединения?


11

Я запускаю ссылку за пределами на xp, соединяясь с внешним узлом. Программа Link зависает примерно через 20 минут, и я не могу это исправить. Когда это происходит, используя tcpview, я вижу, что на хосте осталось около 200 соединений tcp зомби, оставшихся от соединения Link. Я не могу очистить их, они из того же несуществующего процесса. Соединения зависают, пока я не перезагружаю хост. Перезагрузка - единственный способ, которым я нашел, чтобы повторно подключиться за пределами Link. Я думаю, что есть ошибка в outstv, которая вызывает это, но я не могу получить ответы на их форумах. Но, во всяком случае, я хотел бы знать, есть ли способ уничтожить все эти соединения.

Изменить: на самом деле это около 3000 соединений WAIT_CLOSE накапливается примерно через 40 минут, и примерно тогда клиент умирает. Если я закрою серверное приложение, все эти сокеты теперь будут отображаться как принадлежащие процессу -non-existing- в tcpview. Понятный. Но разве нет способа закрыть их без перезагрузки?


Разве нет способа начать щедрость на вопросы здесь? Я не вижу кнопки для этого.
P аул

Вы можете предложить вознаграждение после того, как вопрос был поднят в течение 2 дней: superuser.com/faq
шарлатан-кихот

3
Пожар. Огонь или дробовик.
Фоши

1
@phoshi: или сбросить его с орбиты. это единственный способ быть уверенным.
шарлатан-кихот

1
Я предпочитаю совершить убийство таким способом: superuser.com/questions/54937/3d-windows-managers/55130#55130
DaveParillo

Ответы:


10

Вы можете использовать Currports Nirsoft для мониторинга и уничтожения соединений.

Вы можете автоматизировать уничтожение шаблона соединения, используя AutoHotKey.


7

CLOSE_WAIT означает, что соединение было закрыто на другом конце.

Очевидно, beyondtv не обнаруживает это условие и продолжает отправлять данные в приложение на другом конце. Другой конец не может отправить что-либо через это соединение, так как он закрыл свой конец соединения.

Решение состоит в том, чтобы установить запись TcpTimedWaitDelay в

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters

Эта запись определяет время, которое должно пройти, прежде чем TCP сможет освободить закрытое соединение и повторно использовать свои ресурсы. Этот интервал между закрытием и освобождением известен как состояние TIME_WAIT или состояние 2MSL. В течение этого времени соединение может быть восстановлено с гораздо меньшими затратами для клиента и сервера, чем установление нового соединения.

По умолчанию на моем компьютере это значение равно -1, которое, как я понимаю, означает, что закрытые соединения никогда не освобождаются, и это именно то поведение, которое вы наблюдаете.

Я предлагаю вам установить значение этой записи в допустимом диапазоне 30–300 секунд. Я полагаю, что 300 секунд = 5 минут вполне достаточно для вашего случая, когда для остановки компьютера требуется 40 минут.


Поиск TIME_WAITпривел меня сюда. Спасибо за объяснение и ссылку.
Technext

привет спасибо за объяснение Это все еще не закрытие TCP-соединений. CLOSE_WAIT увеличивается. Я установил Тайм-аут на 30 секунд
aadi1295

1

Возможно, вы сможете заставить Windows принудительно закрыть все TCP-соединения, 1) отключив , а затем 2) повторно включив сетевой интерфейс. Если это работает, вы можете выполнить пакетный сценарий для выполнения шагов, когда это необходимо.

Я искал способ сделать это через командную строку, из netshутилиты (или аналогичной), но мне пока не повезло.

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


Я обновил приложение до последней версии, не помогло, и у меня есть поддержка с ними. Я попытался отключить в свойствах сети, а также удалил в диспетчере устройств, и список соединений WAIT_CLOSE не изменился. Это список где-то в ОС, который я не могу коснуться, кажется.
P аул

1

Вы, вероятно, получаете эти сеансы CLOSE_WAIT из- за зависания программы - я не могу сказать, подозреваете ли вы их как причину, поэтому просто хотел это прояснить.

Я думаю, что они не будут вечно торчать; вероятно, только в течение 2 часов и 5 секунд. Может показаться, навсегда, я знаю. Вы можете попробовать настроить KeepAliveTime (вероятно, требуется одна последняя перезагрузка) для сетевого подключения до чего-то небольшого, например, 5 минут. Это может помочь им быстрее исчезнуть после зависания вашей программы.

Или, если вы знаете, что можете надежно запустить программу, скажем, по 10 минут за раз, вы можете просто периодически перезапускать ее. Не знаю, полезно ли какое-либо из этих решений для вашей конкретной ситуации; Я согласен с кря, что вы должны отказаться от проблемной версии приложения как можно скорее.


я думаю, что программе разрешено переопределять системный параметр в параметре KeepAliveTime, поэтому это может не помочь, но я согласен, что стоит попробовать. однако его настройка может привести к проблемам с другими приложениями.
Квик-кихот

0

Посмотрите, не выходит ли за пределы экрана другой процесс, который удерживает соединения открытыми. Process Explorer покажет вам, если это происходит.


Я не могу найти никаких дополнительных процессов. Закрытие вовне и все связанные с ним процессы не имеют никакого эффекта. Эти соединения отображаются с <несуществующим> для процесса. Процесс завершен, но соединения не будут закрыты.
P аул

Я играл с кнопками рейтинга вверх / вниз, и нет никакого способа вернуться к 0, это либо -1, либо 1, поэтому я оставил его на 1. Было бы лучше иметь этот вопрос с 0 ответами на данный момент, так как этот ответ бесполезен - я использовал проводник процессов и tcpview некоторое время, прежде чем опубликовать этот вопрос.
P аул

0

Возможно ли проблема с брандмауэром? Это может быть неполное соединение, которое пытается и повторяется.

Я бы отключил все брандмауэры на обеих машинах, а если есть маршрутизатор, то и его внутренний брандмауэр.


Я тоже делал это раньше. Повторный сценарий, никакого эффекта, проблема остается. Я смотрю на маршрутизатор Linksys, однако, я буду исследовать.
P аул

0

Попробуйте исправить WinSock XP.

http://www.snapfiles.com/get/winsockxpfix.html

Он перехватывает ваше соединение и сбрасывает его обратно по умолчанию. Я всегда держу это на флешке, когда все остальное терпит неудачу.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.