Таким образом, я lsof -i | wc -l
периодически бегаю, и это говорит мне, что из 420 линий между 240 и 255 находятся в CLOSE_WAIT
состоянии. Как TCP-соединения входят в это состояние?
Должен ли я волноваться и как мне это устранить?
(Я собирался отредактировать ответ mikegrb, но решил, что перебил его слишком много)
CLOSE_WAIT в значительной степени означает именно то, что говорит - ядро ждет, пока локальный процесс закроет свой файловый дескриптор, прежде чем удалить запись. TCP-соединение полностью разорвано, и на дальнем конце может сложиться впечатление, что соединение конечно, но ваш конец держится за вещи.
Единственная проблема заключается в том, что многие записи CLOSE_WAIT потребляют память ядра и записи таблицы дескрипторов файлов, что может быть проблемой, если их много. Если записи, которые вы просматриваете, являются временными, то, вероятно, вы просто много перебираетеTCP-подключений, и вы видите небольшую их часть за небольшой промежуток времени между моментом, когда соединение закрыто, и процесс доходит до закрытия файлового дескриптора. С другой стороны, если они постоянны (порты и IP-адреса не меняются с течением времени), то что-то вызывает утечку дескрипторов, и это нужно исправить, чтобы оно всегда закрывало свои fds после завершения работы с ними. Как сказал mikegrb, более новая версия, возможно, уже устранила проблему, поэтому вопрос в соответствующем списке рассылки или изучение списков изменений, вероятно, оправдан.
Состояние CLOSE_WAIT означает, что другой конец отправил сегмент FIN, чтобы закрыть соединение. Связь все еще установлена. Он находится в режиме, который вы можете рассматривать как полудуплекс, позволяя этому концу очищать любые буферы, посылая последние биты данных в конец, запрашивая закрытие соединения перед закрытием соединения с этого конца.
Если у вас есть много соединений в CLOSE_WAIT, это означает, что ответственный процесс не закрывает сокет после входа в CLOSE_WAIT. Вы можете использовать tcpdump или другие инструменты захвата сетевого трафика для просмотра пакетов.
Также взгляните на ответственный процесс. Из любопытства, что является ответственным процессом? Возможно, имеется более новая исправленная версия или пришло время подать отчет об ошибке;)
источник
если вы работаете в слабой сети, вы можете настроить:
ulimits
и через/proc
(для всей системы)/proc
источник
Вероятно, вы не закрываете ресурс (дескриптор файла, сетевое подключение) где-нибудь в приложении, работающем на сервере.
источник