Здравствуйте
У нас 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) или все-таки проблема в конфигурации (что то нужно убрать, что то добавить) ?