После переключения pm с dynamic
к ondemand
У меня меньше проблем с использованием памяти на моем 1 ГБ VPS, но кажется, что в некоторых ситуациях с высокой нагрузкой сервер все равно зависает. Это VMWare VPS с 1 ГБ реальной оперативной памяти и 4 ГБ «фальшивой» (SSD-кеш).
Я установил newrelic server monitoring и понял, что проблема все еще в php5-fpm. Сервер загружается до 150 (система с 2 процессорами), и все пулы php-fpm порождают максимум 10 дочерних элементов, что потребляет почти 2,5 ГБ ОЗУ, в то время как среднее использование ОЗУ в системе составляет 300 МБ.
Если я понимаю ondemand
правильно, все настройки резервного сервера бесполезны, и порожденные дочерние элементы должны умереть после завершения запроса. Так что единственное, что я могу сделать, это снизить max_children
дальше, но поскольку у меня более 30 пулов, думаю, это мне не поможет.
Это моя стандартная конфигурация пула:
[web2]
listen = 127.0.0.1:9011
listen.allowed_clients = 127.0.0.1
user = web2
group = client1
pm = ondemand
pm.max_children = 10
pm.process_idle_timeout = 10s;
pm.max_requests = 0
Кто-нибудь знает, как оптимизировать эту настройку, чтобы сервер не зависал в ситуациях высокой нагрузки?
****** РЕДАКТИРОВАТЬ ****** Я пробовал process.max = 32
но я совершенно не уверен, что это вообще что-то меняет при использовании ondemand
. Сервер снова рухнул сегодня, и я не понимаю, в чем проблема. Совершенно умеренный трафик. Если я в спешке использую blitz.io на странице, все идет гладко. Он порождает всех 10 дочерних элементов и доставляет страницы так быстро, как только может, одновременно доставляя 500 на любые дополнительные запросы, не вызывая взрыва сервера.
Наконец нашел проблему.
Я так много прочитал о ботнете Wordpress и не знаю, почему я не подумал об этом в первый раз. Все пулы являются сайтами Wordpress, и ботнет одновременно поражает их случайным образом, что приводит сервер в ужас.
Я сейчас установил fail2ban
(Я почти уверен, что я тоже делал это на старом сервере ...), а также понижал max_children
и кажется, что теперь сервер может пережить атаку без перезагрузки.