NGINX некоторое время не принимает запросы после выполнения reload

Дмитрий Ансимов ads на unix4all.com
Пн Июл 4 15:14:00 UTC 2016


Задавал вопрос тут <https://toster.ru/q/330257>, но опишу суть проблемы и
симптомы:

Во время релоада конфига nginx (4 ядра, 4Gb, выступает в роли reverse
proxy) временно перестает отвечать на запросы, включая и те, что приходят
на localhost (zabbix рапортует о недоступности). RPS при этом находится на
уровне 1600-1800, netstat ничего, на мой взгляд, необычного, не показывает.
dmesg и error.log о проблемах не сообщают.


$ netstat -tpn |awk '/:80/||/:443/{print $6}' |sort |uniq -c 3 CLOSE_WAIT 13
CLOSING 17568 ESTABLISHED 292 FIN_WAIT1 962 FIN_WAIT2 171 LAST_ACK 309
SYN_RECV 54314 TIME_WAIT $ netstat -tpn |awk '/nginx/{print $6,$7}' |sort
|uniq -c 3124 ESTABLISHED 10005/nginx 3073 ESTABLISHED 10006/nginx 2965
ESTABLISHED 10007/nginx 2980 ESTABLISHED 10008/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;

  server {
    listen  80 default_server backlog=1000;
    listen  443 ssl backlog=1000;
    ....
    }
}


*custom sysctl.conf*

net.ipv4.ip_local_port_range=1024
65535net.ipv4.conf.all.accept_redirects=0net.ipv4.conf.all.secure_redirects=0net.ipv4.conf.all.send_redirects=0net.core.netdev_max_backlog=10000net.ipv4.tcp_syncookies=0net.ipv4.tcp_max_syn_backlog=20480net.ipv4.tcp_synack_retries=2net.ipv4.tcp_syn_retries=2net.ipv4.tcp_rmem=4096
87380 16777216net.ipv4.tcp_wmem=4096 65536
16777216net.core.rmem_max=16777216net.core.wmem_max=16777216net.netfilter.nf_conntrack_max=1048576net.ipv4.tcp_congestion_control=htcpnet.ipv4.tcp_timestamps=1net.ipv4.tcp_no_metrics_save=1net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_recycle=0net.ipv4.tcp_max_tw_buckets=1400000net.core.somaxconn=250000net.ipv4.tcp_keepalive_time=900net.ipv4.tcp_keepalive_intvl=15net.ipv4.tcp_keepalive_probes=5net.ipv4.tcp_fin_timeout=10

Графики некоторых статистик *netstat -s*  здесь
<http://joxi.ru/GrqY6MPUKnOPrz>

Так же смотрел параллельно *strace -f -p master_pid* и *strace -p
worker1_pid -p workerN_pid *при выполнении *service nginx reload*

В логах strace наблюдается следующее:

getsockopt(556, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 accept4(10,
0x7ffd02e26b90, [110], SOCK_NONBLOCK) = -1 EAGAIN (Resource temporarily
unavailable)

и

[pid 27364] getsockopt(556, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 [pid 27364]
writev(556, [{"POST /test?arg=value HTT"..., 493}, {
"v=1&_v=j44&a=124365396&t=554343"..., 573}, {"D0%BE%D0%B9%2C%20%D0%BB%D1%83
%D1"..., 3238}], 3) = 4304 [pid 27364] recvfrom(45, 0x7ffd02e26bff, 1, 2, 0,
0) = -1 EAGAIN (Resource temporarily unavailable) [pid 27364] recvfrom(151,
"\26", 1, MSG_PEEK, NULL, NULL) = 1

Это похоже на то, что могло бы стать причиной моей проблемы? (заранее
оговорю - до этого strace'ом пользовался сильно вскользь)

Заранее спасибо за любую помощь.

-- 
Sincerely,
Dmitry Ansimov
freelance system administrator
skype: cardinal-gray
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20160704/e3e6be9a/attachment.html>


Подробная информация о списке рассылки nginx-ru