Як я можу позбутися від розеток у стані FIN_WAIT1?


18

У мене є порт, який блокується процесом, який мені потрібно було вбити. (маленький демон-телнет, який розбився). Процес було вбито успішно, але порт все ще знаходиться у стані "FIN_WAIT1". З цього не виходить, час очікування для цього, мабуть, встановлений на "десятиліття".

Єдиний спосіб, який я знайшов звільнити порт - це перезавантажити всю машину, що, звичайно, те, що я не хочу робити.

$ netstat -tulnap | grep FIN_WAIT1 
tcp        0  13937 10.0.0.153:4000         10.0.2.46:2572          FIN_WAIT1  -

Хтось знає, як я можу розблокувати цей порт без перезавантаження?

Відповіді:


18
# record what tcp_max_orphans's current value
original_value=$(cat /proc/sys/net/ipv4/tcp_max_orphans)

#set the tcp_max_orphans to 0 temporarily
echo 0 > /proc/sys/net/ipv4/tcp_max_orphans

# watch /var/log/messages
# it will split out "kernel: TCP: too many of orphaned sockets"
# it won't take long for the connections to be killed

# restore the value of tcp_max_orphans whatever it was before. 
echo $original_value > /proc/sys/net/ipv4/tcp_max_orphans

# verify with 
netstat -an|grep FIN_WAIT1

2
це покращило б відповідь спочатку зауважити, $whateveritwasперш ніж її перезаписати.
перевірив

7

Ви повинні мати можливість встановити тайм-аут за допомогою /proc/sys/net/ipv4/tcp_fin_timeout.

Насправді, здається, немає способу очистити розетку вручну.


6
Ця відповідь не правильна. tcp_orphan_retries впливає на FIN_WAIT1, tcp_fin_timeout впливає на FIN_WAIT2.
suprjami

suprjami правильна, tcp_fin_timeout впливає на FIN_WAIT2. Що запускається лише при використанні SO_LINGER.
Метт

@innaM Чи можете ви видалити цю відповідь? Це невірно і накопичує низові записи. Я бачу, що ви все ще активні, тому, здається, має найбільш сенс видалити відповідь.
Андрій Б

@Andrew B: Здається, що видалити прийняті відповіді неможливо.
innaM

6

Здається, що налаштування tcp_orphan_retries контролює, скільки спроб буде зроблено до виходу порта без сервера. Тут було 0, після встановлення його на 1 портів не було.

HTH


1
Тісно пов’язані: 0 за замовчуванням, це означає 8. serverfault.com/a/408882/152073
Andrew B

5

/proc/sys/net/ipv4/tcp_fin_timeout- час очікування стану FIN-WAIT-2, а не FIN-WAIT-1. Вам слід їхати по маршруту tcpkill або ви можете спробувати пограти з киепалівом, /proc/sys/net/ipv4/tcp_keepalive_*щоб змусити вбити ЗС .


2

Виконуючи ці кроки під ідентифікатором root, і він очистився для мене:

Захопіть налаштування ядра для зміни змінної

$ orig_orphans=$(sysctl -a|grep tcp_max_orph|cut -f3 -d' ')

Тимчасово встановіть максимальних сиріт на 0

$ sysctl -w net.ipv4.tcp_max_orphans=0

Переконайтеся, що проблемний порт більше не використовується

$ netstat -np|grep 9716

Почекайте трохи і повторіть вищезгаданий крок, якщо потрібно, поки вищезгадана команда не поверне рядки

Скиньте параметр ядра tcp_max_orphans назад до початкового значення зі змінної вище

$ sysctl -w net.ipv4.tcp_max_orphans=$orig_orphans

Привіт, Ласкаво просимо на сервер за замовчуванням. Я відредагував вашу публікацію, щоб зробити форматування вашої відповіді більш відповідним іншим відповідям на цьому веб-сайті. Для вашої наступної відповіді, будь ласка, не використовуйте стільки назв, як ви робили тут, і розглядайте можливість приймати інші відповіді як шаблон для власних відповідей. Дякуємо за Ваш внесок. Насолоджуйтесь їздою на сервері за замовчуванням.
Річард

1

FIN_WAIT1

Додаток на локальній машині закрив з'єднання. Вказівка ​​на це надіслана віддаленій машині.

У вас програма закрила свою сторону з'єднання, сокет тепер чекає віддаленої сторони, щоб підтвердити це закриття. Якщо у вас є проблеми з тим, що багато цих розеток утримуються у FIN_WAIT1, то слід дотримуватися порад Манні вище.


0

У ядрі Linux> = 4.9 ви можете використовувати ssкоманду з iproute2 за допомогою клавіші -K

ss -K dst 192.168.1.214 dport = 49029 ядро ​​має бути скомпільовано з увімкненою опцією CONFIG_INET_DIAG_DESTROY.

через /unix//a/511691/43898



-4

це може допомогти:

net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_retries2 = 2
net.ipv4.tcp_orphan_retries = 1
net.ipv4.tcp_reordering = 5
net.ipv4.tcp_retrans_collapse = 0

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