Ошибки php-fpm (SIGKILL) и (SIGABRT)

Автор cyrax, 06 ноября 2016, 16:08:20

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

cyrax

VPS, памяти мало - 512 Мб. Файл подкачки 1025 Мб.
Оперативная память вся заполнена, файл подкачки периодически тоже полностью заполняется.

nginx + php-fpm
Запросы к php-fpm поступают примерно 1,5 штуки в секунду. Максимальное количество активных php-процессов = 10 (если pm.max_children увеличить)

Проблемы следующие:
1. Если в настройках php-fpm прописать pm.max_children = 6, то 1-2 раза в минуту в php-fpm вылезают следующие ошибки:
WARNING: [pool ...] child 29936 said into stderr: "*** Error in `php-fpm: pool ...': free(): invalid pointer: 0x00007f3fa80b63b8 ***"
WARNING: [pool ...] child 29936 exited on signal 6 (SIGABRT) after 127.304479 seconds from start

При этом в логах nginx ошибок и предупреждений нет. Т.е. nginx нормально получает ответ от php-fpm

Что это за ошибка ? Происходит только на стороне php-fpm и никак не затрагивает nginx.
Складывается такая картина: процесс php-fpm, сгенерировав html-код, нормально отдаёт его nginx'у, а затем при попытке освободить после себя память (команда free по некорректному адресу) терпит крах и падает. И всё это происходит после нормальной отдачи контента nginx'у.

2. Если увеличить pm.max_children в 10 раз - до 60 (ну и пропорционально pm.start_servers, pm.min_spare_servers, pm.max_spare_servers), то получаем следующую картину:
1-2 раза в минуту в логах php-fpm получаем ошибки: WARNING: [pool ...] child 29628 exited on signal 9 (SIGKILL) after 316.199535 seconds from start
2-4 раза в минуту в логах nginx получаем ошибки: [error] 28026#28026: *37051 recv() failed (104: Connection reset by peer) while reading response header from upstream

А вот здесь логика не понятна. Что происходит в этом случае ?
Сигнал SIGKILL получают php-процессы после обработки [pm.max_requests] запросов (см.ниже). В данном случае такой же сигнал они получают по некой иной причине ? Причём в процессе генерации html-контента. Падают и в итоге nginx не получет данные и тоже ругается. Вопрос в том, что здесь происходит с php-fpm процессами ?

P.S. Значение [pm.max_requests] я поставил в заведомо большое (недостижимое) значение, чтобы отделить мух от котлет.

3. Ну а если [pm.max_requests] поставить в какое-либо приемлемое (малое) значение, то при достижение php-fpm-процессами этого лимита картину получаем следующую:
php5-fpm генерирует предупрежедение: WARNING: [pool ...] child 27218 exited on signal 9 (SIGKILL) after 163.887046 seconds from start
nginx генерирует ошибку: [error] 27273#27273: *3117 recv() failed (104: Connection reset by peer) while reading response header from upstream

А вот здесь не понятно, почему при достижении лимита [pm.max_requests] php-процессы завершаются в момент генерации html-контента для nginx, а не после отдачи контента nginx'у ?

ogost

гугл выдает что-то насчёт opcache, покажите /usr/share/php5/common/opcache.ini

cyrax

Цитироватьгугл выдает что-то насчёт opcache, покажите /usr/share/php5/common/opcache.ini
; configuration for php ZendOpcache module
; priority=05
zend_extension=opcache.so

opcache я отключил. Он на проблему никак не влияет. Что с ним, что без - ничего не меняется.

BegU

Подскажите, из-за чего может возникать такая ошибка:


[12-Aug-2017 12:11:09] WARNING: [pool site.ru] child 17491 exited on signal 9 (SIGKILL) after 1071.230637 seconds from start
[12-Aug-2017 12:11:09] NOTICE: [pool site.ru] child 19138 started