Добрый день.
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

Ответить