[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

poll() timeout в PHP-FPM при получении запросов от Nginx



Добрый день.
Debian 7 amd64, PHP-FPM 5.4.4 изх комплекта дистрибутива.

Регулярно (несколько раз в неделю, иногда - несколько раз в день) сталкиваюсь с ситуацией непонятного торможения php-fpm, выглядит этот как резкое уменьшение количества коннектов к БД и полностью забитом бэклоге FPM. Варианты типа "подключение ко внешним сайтам" и т.п. исключили из кода.
Потыкал strace в воркеры (их у меня 64 обычно на один веб-сервер).
В "проблемные" периоды есть анамалия выглядящая следющим образом:

00:16:17.507658 accept(0, {sa_family=AF_INET, sin_port=htons(19554), sin_addr=inet_addr("1.2.3.4")}, [16]) = 67
00:16:17.508000 time(NULL)              = 1384892177
00:16:17.508190 times({tms_utime=84, tms_stime=22, tms_cutime=0, tms_cstime=0}) = 1780948166
00:16:17.508505 poll([{fd=67, events=POLLIN}], 1, 5000) = 0 (Timeout)
00:16:22.513709 close(67)               = 0
00:16:22.513922 accept(0, {sa_family=AF_INET, sin_port=htons(29537), sin_addr=inet_addr("1.2.3.4")}, [16]) = 67
00:16:22.514073 time(NULL)              = 1384892182
00:16:22.514190 times({tms_utime=84, tms_stime=22, tms_cutime=0, tms_cstime=0}) = 1780948667
Ну и далее следует успешный poll() и чтение запроса от веб-сервера.

fd=67 - это подключение от nginx на соседнем сервере.
Т.е. непонятно по какой причине poll() зависает на 5 секунд блокируя работу интерпретатора. Вероятность проблемы может быть весьма высокой, например 1/60, что при условии получения 1000-1500 запросов в секунду очень болезненно.
Подскажите, куда дальше копать?
Может быть где-то в /proc или /sys есть общесистемный счётчик tcp retransmit для каждого интерфейса либо IP, чтобы проверить версию с потерями пакетов во внутренней сети?
Отдельно беспокоит тот факт, что проблемы начались после переезда с 6 на 7 версию ОС.

Заранее благодарен за советы.
--
WBR,  Bogdan B. Rudas

Reply to: