В последнее время мой сервер (i7-2600 @ 4x3,4 ГГц, 8 ГБ ОЗУ) в среднем сильно загружается. Ive кэшировал самые популярные страницы и пытался удалить их, чтобы проверить, не виноваты ли они, но это не дало существенных изменений.
Средняя нагрузка ниже 1.0, когда я перезапускаю свой сервер, а затем внезапно она начинает расти и переходит на 6.0 - 25.00, и я получаю 504 ошибки тайм-аута шлюза, и ssh становится очень медленным, что вызывает множество проблем.
Я думаю, что это как-то связано с моей конфигурацией php-fpm, потому что я использовал mysqltuner.pl и следовал инструкциям там, а также, как я сказал, я кэшировал и удалил на несколько минут самые популярные страницы, и у них также есть тяжелые запросы с оставшимися соединения и т. д., и это не дало значительных изменений, я имею в виду, что нагрузка может упасть примерно на 5%, но это не то, что мне нужно.
Мой сайт получает около 500 уникальных пользователей каждые 5 минут (статистика Google Analytics в реальном времени) и около 5-15 просмотров страниц каждую секунду.
Итак, вот моя конфигурация php-fpm, может ли кто-нибудь предложить, что отрегулировать?
pm = динамический
pm.max_children = 500
pm.start_servers = 400
pm.min_spare_servers = 50
pm.max_spare_servers = 500
pm.max_requests = 0
Маловероятно, что у вас достаточно оперативной памяти для работы 500 процессов PHP. В моих ящиках они обычно занимают 40-80 МБ каждый в зависимости от того, что они делают.
Итак, что здесь происходит: когда вы запускаете PHP, он пытается запустить 400 собственных копий, как вы указали. Но вам потребуется как минимум вдвое больше оперативной памяти, чем у вас есть сейчас! Таким образом, машина очень быстро начинает менять местами и останавливается.
Резко отбросьте эти числа, пока не будете в пределах своей памяти. Для обработки 5-15 просмотров страниц в секунду не требуется 400 одновременных запущенных процессов.
Вы также должны установить значение для pm.max_requests
в случае утечки памяти в PHP или другом модуле PHP, который вы можете использовать. К сожалению, это слишком часто.
Чтобы вернуть ваш сервер под контроль, попробуйте начать с:
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 50
pm.max_requests = 500
Это дает вам достаточно места для обработки как обычного трафика, так и пиковых нагрузок, в 5 раз превышающих обычную. Вы можете поднять pm.max_children
если вы начинаете становиться намного более загруженным и видите в журналах записи о нехватке детей, но перед этим проверьте свободную оперативную память; если вы когда-нибудь дойдете до этого, вам, вероятно, придется обновить сервер.