Выбор ответа Senior Сеть в Linux обновлено
Тысячи CLOSE_WAIT
Вопрос
На сервере приложения ss -tan показывает тысячи соединений в CLOSE_WAIT к базе данных. Что это скорее всего значит?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Удалённая сторона закрыла соединение, а приложение не вызвало close(). CLOSEWAIT значит, что пришёл FIN от собеседника, и ядро ждёт, пока локальное приложение закроет сокет.
Варианты ответа
- База перегружена и перестала принимать новые соединения
- Это нормальное состояние: ядро само уберёт CLOSE_WAIT через 60 секунд после закрытия
- Удалённая сторона закрыла соединение, а приложение не вызвало
close()правильный ответ - Сетевой фаервол режет пакеты FIN между приложением и базой
Разбор
CLOSE_WAIT значит, что пришёл FIN от собеседника, и ядро ждёт, пока локальное приложение закроет сокет. Само оно не исчезнет: это баг или утечка в пуле соединений. 60 секунд и самоочистка это про TIME_WAIT. Перегрузка базы проявилась бы отказами или таймаутами, а резка FIN привела бы к зависшим ESTABLISHED.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.