Як вбити з'єднання Windows zombie tcp?


11

Я працюю за посиланням понадtv на xp, підключаюся до хосту izvantv a Vista. Програма Link зависає приблизно через 20 хв, і я не маю цього виправлення. Коли це відбувається, використовуючи tcpview, я бачу, що у хоста близько 200 з’єднань зомбі tcp, що залишилися від з'єднання Link. Я не можу їх очистити, вони з того самого неіснуючого процесу. З'єднання зависають, поки я не перезавантажую хост. Перезавантаження - це єдиний спосіб, який я знайшов, щоб знову підключитися понад Link Link. Я думаю, що існує проблема помилки в overstvv, але я не можу отримати відповіді на їх форумах. Але в будь-якому випадку я хотів би знати, чи є спосіб вбити всі ці зв’язки.

Редагувати: насправді близько 3000 WAIT_CLOSE з'єднань накопичується приблизно через 40 хв., І приблизно тоді клієнт помирає. Якщо я закрию серверну програму, усі ці сокети тепер показують, що належать неіснуючому процесу в tcpview. Зрозуміло. Але хіба немає способу їх закрити без перезавантаження?


Чи не існує способу започаткувати щедрість із питань? Я не бачу кнопки для цього.
P aul

ви можете запропонувати щедрість після того, як питання було порушено протягом 2 днів: superuser.com/faq
quack quixote

3
Вогонь. Вогонь або рушниця.
Phoshi

1
@phoshi: або запустити його з орбіти. це єдиний спосіб бути впевненим.
шарлатаний кіхот

1
Я вважаю за краще робити вбивство приреченим способом: superuser.com/questions/54937/3d-windows-managers/55130#55130
DaveParillo

Відповіді:


10

Ви можете використовувати Currports Nirsoft для контролю та знищення з'єднань.

Ви можете автоматизувати вбивство схеми з'єднання за допомогою AutoHotKey.


7

CLOSE_WAIT означає, що з'єднання було закрито на іншому кінці.

Очевидно, що overtv не виявляє цієї умови і продовжує надсилати дані в програму на іншому кінці. Інший кінець нічого не може надсилати назад через це з'єднання, оскільки він закрив свій кінець з'єднання.

Рішення - встановити запис 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 не вплинув. Це список десь в ОС, який я не можу торкнутися, здається.
П аул

1

Ви, ймовірно, отримуєте ці сеанси CLOSE_WAIT через вивільнення програми - я не можу сказати, чи підозрюєте ви їх як причину, тому просто хотів зробити це зрозумілим.

Я здогадуюсь, що вони не вішатимуться вічно; ймовірно, лише протягом 2 годин і 5 секунд. Я можу здатися назавжди, я знаю. Ви можете спробувати налаштувати KeepAliveTime (можливо, потрібна одна остаточна перезавантаження) для підключення до мережі до невеликого, наприклад, 5 хвилин. Це може допомогти їм швидше зникнути після того , як ваша програма зависне.

Або якщо ви знаєте, що можете надійно запустити програму протягом, скажімо, 10 хвилин за один раз, ви можете просто періодично її перезапустити. Не знайте, чи корисне якесь із цих рішень для вашої конкретної ситуації; Я погоджуюся з ~ quack, що ви повинні якнайшвидше скинути проблемну версію програми.


Я думаю, що програмі дозволяється переосмислити системне налаштування за параметром KeepAliveTime, тому це може не допомогти, але я погоджуюся, що це варто спробувати. Однак, якщо його налаштувати, це може призвести до проблем з іншими програмами.
кихот шарлатан

0

Подивіться, чи не зароджений нерегулярний інший процес, який підтримує з'єднання відкритими. Провідник процесів покаже, якщо це відбувається.


Я не можу знайти жодних додаткових процесів. Закриття поза телевізором та всі пов'язані з цим процеси не впливає. Ці з'єднання відображаються з <неіснуючими> для процесу. Процес завершився, але з'єднання не закритимуться.
P aul

Я грав із кнопочками оцінки відповідей вгору / вниз, і немає можливості повернутися до 0, це або -1, або 1, тому я залишив його у 1. Було б краще мати це питання з 0 відповідями в цей момент, оскільки ця відповідь не є корисною - я перед тим, як опублікувати це питання, я використовував провідник процесів та tcpview.
П аул

0

Чи можливо проблема з брандмауером? Це може бути неповне з’єднання, яке пробується та повторено.

Я б відключив усі брандмауери на обох машинах, і якщо є маршрутизатор, також його внутрішній брандмауер.


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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.