Зависание nginx из-за memcached

Vadim Osipov nginx-forum на forum.nginx.org
Пн Май 23 07:19:18 UTC 2016


Здравствуйте

У нас 5 nginx, которые соединены с 2мя memcached. После того как на
memcached случился 
segfault at 24 ip
000000000040dda0 sp 00007ff13d03cc10 error 4 in memcached[400000+16000];

каждый nginx worker (по настройке их 8 на каждом nginx) начинает
утилизировать 100% ядра CPU, вызывая "зависание" процессов nginx на всех
серверах. Когда подняли сбойнувший memcached с помощью monit, то ситуация не
изменилась. Пришлось убить все nginx и снова поднять. После этого, все
заработало как до segfault.


Версия nginx: 1.4.2
Версия memcached: 1.4.10
ОС: CentOS 6.5

Настройки memcached в nginx:
upstream  memcached_screenshots  {        
    server   127.0.0.1:11211;
    hash      $uri;
    keepalive 512;
}
memcached_connect_timeout   60s;
memcached_read_timeout      60s;
memcached_send_timeout      60s;

Запуск memcached:
memcached -d -p 11211 -u memcached -m 16384 -c 1024 -P
/var/run/memcached/memcached.pid -t 2

Настройки nginx workers:
worker_processes  8;
timer_resolution 100ms;
worker_rlimit_nofile 50000;
worker_priority -5;

events          {
    worker_connections  100000;
    use epoll;
}

Как я понимаю, segfault является следствием количества evictions в memcached
(200-2000) перед моментом остановки процесса (возможно баг в процессе
дефрагментации у memcached), и т.к. задан timeout, видимо, относительно
большой в 60 секунд, то те запросы, которые приходили на nginx, скапливались
в некоторой очереди в ожидании получения соединения, а каждый worker ходил
по этой очереди и проверял для каждого запроса, имеется ли возможность
соединиться с memcached или нет. Ну + к этому, возможно, когда случился
segfault сокет не отдался ОС (достоверно неизвестно на данный момент, после
segfault убился процесс memcached или нет). Видимо, уменьшение
connect|read|write timeout должно решить проблему. Но так ли это ?

Подскажите, пожалуйста, как если не устранить проблему, то уменьшить
возможность ее появления в ближайшем будущем. И является ли это проблемой
nginx (возможно, у клиента старая версия nginx и стоит обновиться до 1.10)
или все-таки проблема в конфигурации (что то нужно убрать, что то добавить)
?

Posted at Nginx Forum: https://forum.nginx.org/read.php?21,267049,267049#msg-267049



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