PHP-FPM + nginx -кратковременные падения при нагрузке
Posted: Mon Jan 25, 2016 5:58 pm
Добрый день!
Настраиваю dedicated сервер 2 ядра (4 потока), 8 Gb RAM, 512 swap, Centos 7.
Установил Vestacp, связка nginx+php-fpm, APC, база Mariadb.
На сервере десяток сайтов, два с большой посещаемостью, остальные меньше 50 человек в день.
Суммарная посещаемость в районе 10000 просмотров в сутки.
Проблема наблюдается следующая: без какой-либо закономерности сайты (вероятно под нагрузкой, но не факт) начинают выдавать ошибку 500 в течение минут 10-15, затем работают нормально. Если в течение этих 10-15 минут я делаю рестарт php-fpm через панель, то все грузится хорошо.
Перерыл всякие блоги и форумы на предмет настроек php-fpm, везде рекомендации сводятся к глобальному файлу настроек www.conf, но Vestacp создает настройки пулов автоматически под каждый сайт и вот здесь как мне кажется и зарыта моя проблема.
Посоветуйте настройки pm.max_children, pm.start_servers, pm.min_spare_servers и pm.max_spare_servers для каждого пула(с учетом двух более загруженных сайтов) и что в www.conf при этом должно быть, чтобы php-fpm не забивал всю память?
Сейчас www.conf выглядит так:
[www]
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
user = apache
group = apache
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 8
pm.max_spare_servers = 16
pm.max_requests = 500
В разделе server VESTA показаны следующие цифры по загрузке RAM:
MariaDB: 4109 mb
PHP-FPM: 4927 mb
При рестарте PHP-FPM забирает в районе 3000 Mb, и потом довольно быстро раздувается и лезет в swap.
Еще почему-то висит служба NAMED и она всегда показывает одни и те же цифры что и php-fpm, хотя она выключена (из панели при этом если ее пытаться "выключить" - ничего не происходит, очевидно баг)
В логах ничего особенного нет, кроме вот таких варнингов:
server reached pm.max_children setting (25), consider raising it
seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 7 idle, and 23 total children
База настроена в соответствии с mysqltuner.
Настраиваю dedicated сервер 2 ядра (4 потока), 8 Gb RAM, 512 swap, Centos 7.
Установил Vestacp, связка nginx+php-fpm, APC, база Mariadb.
На сервере десяток сайтов, два с большой посещаемостью, остальные меньше 50 человек в день.
Суммарная посещаемость в районе 10000 просмотров в сутки.
Проблема наблюдается следующая: без какой-либо закономерности сайты (вероятно под нагрузкой, но не факт) начинают выдавать ошибку 500 в течение минут 10-15, затем работают нормально. Если в течение этих 10-15 минут я делаю рестарт php-fpm через панель, то все грузится хорошо.
Перерыл всякие блоги и форумы на предмет настроек php-fpm, везде рекомендации сводятся к глобальному файлу настроек www.conf, но Vestacp создает настройки пулов автоматически под каждый сайт и вот здесь как мне кажется и зарыта моя проблема.
Посоветуйте настройки pm.max_children, pm.start_servers, pm.min_spare_servers и pm.max_spare_servers для каждого пула(с учетом двух более загруженных сайтов) и что в www.conf при этом должно быть, чтобы php-fpm не забивал всю память?
Сейчас www.conf выглядит так:
[www]
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
user = apache
group = apache
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 8
pm.max_spare_servers = 16
pm.max_requests = 500
В разделе server VESTA показаны следующие цифры по загрузке RAM:
MariaDB: 4109 mb
PHP-FPM: 4927 mb
При рестарте PHP-FPM забирает в районе 3000 Mb, и потом довольно быстро раздувается и лезет в swap.
Еще почему-то висит служба NAMED и она всегда показывает одни и те же цифры что и php-fpm, хотя она выключена (из панели при этом если ее пытаться "выключить" - ничего не происходит, очевидно баг)
В логах ничего особенного нет, кроме вот таких варнингов:
server reached pm.max_children setting (25), consider raising it
seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 7 idle, and 23 total children
База настроена в соответствии с mysqltuner.