Почему CLOSE_WAIT зависают и вешают веб-сервер?

Добрый день.
Есть контейнер docker в котором крутится nginx
Делаю нагрузочное тестирование и через некоторое время сервер перестает отвечать.
Помогает только перезагрузка службы docker.

Если смотреть netstat, то видно, что тип состояния CLOSE_WAIT зависло и значения постоянное.
1 Foreign
1 established)
2 LISTEN
602 ESTABLISHED
1306 CLOSE_WAIT

В чем может быть проблема?
  • Вопрос задан
  • 1604 просмотра
Пригласить эксперта
Ответы на вопрос 1
@hx510b
"Я знаю, что ничего не знаю"
Можно донастроить TCP стек, чтобы уменьшить время удержания открытых сокетов:
echo 5 > /proc/sys/net/ipv4/tcp_fin_timeout  # освобождать через 5 секунд
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle  # включить утилизацию

Изменить параметрые nginx:
worker_processes auto;
- количество процессов по количеству ядер CPU или auto
events {
       worker_connections 10000;
       multi_accept on;
}

- worker_connections сколько надо держать соединений на один процесс, т.е.
worker_processes * worker_connections = сколько всего соединений надо обрабатывать.
multi_accept on - процесс будет пытаться сразу брать все новые соединения, а не по одному.
worker_rlimit_nofile 200000;
- т.е. если хотим 100000 соединений, то пишем 200000

надо изменить в системе лимит на количество открытых файлов:
ulimit -n 1031089
считается, что для гигабитного канала больше 50 тысяч соединений не получить.

Еще по теме:
https://habr.com/post/198982/ - Ускоряем Nginx за 5 минут
https://romantelychko.com/blog/1300/ - Настройка Linux для высоконагруженных проектов и защиты от DDoS
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы