SYN переполнен через порт 443 при перезагрузке nginx
При перезагрузке nginx я начал получать сообщения об ошибках в журнале сообщений "возможное переполнение SYN на порту 443", и кажется, что nginx в это время полностью не отвечает (довольно долго), поэтому zabbix сообщает "nginx не работает" с ping 0s. RPS на тот момент составляет около 1800.
Но сервер остается отзывчивым на других не веб-портах (SSH и т. Д.)
Где я должен посмотреть и какие конфиги (sysctl, nginx) я должен показать, чтобы найти причину этого.
Заранее спасибо.
Некоторая дополнительная информация:
$ netstat -tpn |awk '/nginx/{print $6,$7}' |sort |uniq -c
3266 ESTABLISHED 31253/nginx
3289 ESTABLISHED 31254/nginx
3265 ESTABLISHED 31255/nginx
3186 ESTABLISHED 31256/nginx
Пример nginx.conf:
worker_processes 4;
timer_resolution 100ms;
worker_priority -15;
worker_rlimit_nofile 200000;
events {
worker_connections 65536;
multi_accept on;
use epoll;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_requests 100;
keepalive_timeout 65;
}
custom sysctl.conf
net.ipv4.ip_local_port_range=1024 65535
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.all.send_redirects=0
net.core.netdev_max_backlog=10000
net.ipv4.tcp_syncookies=0
net.ipv4.tcp_max_syn_backlog=20480
net.ipv4.tcp_synack_retries=2
net.ipv4.tcp_syn_retries=2
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.netfilter.nf_conntrack_max=1048576
net.ipv4.tcp_congestion_control=htcp
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_no_metrics_save=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=0
net.ipv4.tcp_max_tw_buckets=1400000
net.core.somaxconn=250000
net.ipv4.tcp_keepalive_time=900
net.ipv4.tcp_keepalive_intvl=15
net.ipv4.tcp_keepalive_probes=5
net.ipv4.tcp_fin_timeout=10
UPD
При нормальной нагрузке около 1800 RPS, когда я установил backlog на nginx равным 10000 на 80 и 443 порта, а затем перезагрузил nginx, он стал использовать больше оперативной памяти (использовалось 3,8 ГБ из моего экземпляра 4 ГБ, а некоторые работники были убиты OOM-killer), и с параметром worker_priority при -15 нагрузка превысила 6 (в то время как мой экземпляр имеет только 4 ядра). Итак, экземпляр был довольно запаздывающим, и я установил параметру worker_priority на -5, а backlog на 1000 для каждого порта. На данный момент он использует меньше памяти, а пиковая нагрузка составила 3,8, но nginx по-прежнему перестает отвечать на запросы в течение минуты или двух после перезагрузки. Таким образом, проблема все еще сохраняется.
Некоторые подробности netstat:
netstat -tpn |awk '/:80/||/:443/{print $6}' |sort |uniq -c
6 CLOSE_WAIT
14 CLOSING
17192 ESTABLISHED
350 FIN_WAIT1
1040 FIN_WAIT2
216 LAST_ACK
338 SYN_RECV
52541 TIME_WAIT
1 ответ
Это сообщение будет означать, что ваша очередь TCP SYN переполнена во время перезагрузки - перезагрузка занимает некоторое время? Я заметил, что вы установили net.core.netdev_max_backlog
, net.ipv4.tcp_max_syn_backlog
а также net.core.somaxconn
к высоким значениям, что хорошо. Вам также необходимо убедиться, что вы указали серверу nginx использовать большое количество невыполненных заданий SYN. listen 443 backlog=10000;
http://nginx.org/en/docs/http/ngx_http_core_module.html