Выбор ответа Senior Сеть в Linux обновлено

Тысячи CLOSE_WAIT

Вопрос

На сервере приложения ss -tan показывает тысячи соединений в CLOSE_WAIT к базе данных. Что это скорее всего значит?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Удалённая сторона закрыла соединение, а приложение не вызвало close(). CLOSEWAIT значит, что пришёл FIN от собеседника, и ядро ждёт, пока локальное приложение закроет сокет.

Варианты ответа

  1. База перегружена и перестала принимать новые соединения
  2. Это нормальное состояние: ядро само уберёт CLOSE_WAIT через 60 секунд после закрытия
  3. Удалённая сторона закрыла соединение, а приложение не вызвало close()правильный ответ
  4. Сетевой фаервол режет пакеты FIN между приложением и базой

Разбор

CLOSE_WAIT значит, что пришёл FIN от собеседника, и ядро ждёт, пока локальное приложение закроет сокет. Само оно не исчезнет: это баг или утечка в пуле соединений. 60 секунд и самоочистка это про TIME_WAIT. Перегрузка базы проявилась бы отказами или таймаутами, а резка FIN привела бы к зависшим ESTABLISHED.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.