У меня есть http-сервер apache. Недавно мой сервер стал перегружен, в результате чего служба больше не отвечала ни на какие HTTP-запросы (последний ответ был 503). Даже когда сервер больше не был перегружен, сервис не встал на ноги. Только перезапуск службы примерно через 50 минут воскресил службу (и с тех пор все в порядке). Мой сайт управляется скриптом php. Вероятно, потому что очень длинный цикл перегрузил ресурсы сервера. У меня вопрос, как сделать apache, терпимым к такой перегрузке и не разрушающимся полностью. Спасибо.
Ваш вопрос слишком общий. Вам нужно будет поработать над своим PHP-скриптом, чтобы он масштабировался… и все зависит от того, что он делает.
Помимо этого, вы можете ограничить количество одновременных операций, если вы используете Apache в режиме prefork, например, с помощью MaxClients
настройка.
Настройка apache сложна, но это должно дать вам несколько указателей
Самое важное - начать измерения - использование памяти, процессор, нагрузка, количество одновременных подключений - чтобы вы знали который ресурс на исходе.
(IMHO, предложение jdog об установке произвольного ограничения на использование памяти php не является конструктивным).
возможно, потому что очень длинный цикл перегрузил ресурсы сервера
Не угадай. Измерьте.
Цикл с большим количеством изолированных итераций вряд ли убьет ваш сервер. OTOH, если этот скрипт медленный, использует много памяти и к нему часто обращаются, то он может быть основным источником проблемы, но из предоставленной вами информации невозможно сказать
Вам, вероятно, лучше всего оптимизировать использование памяти PHP, а также убедиться, что Apache не «ломается».
Убедитесь, что ваш PHP memory_limit является разумным, т.е. попробуйте увеличить его до 64 МБ или 96 МБ. Искать во всем вашем коде ini_set ('memory_limit')
Затем убедитесь, что Apache не принимает больше запросов, чем вы можете обработать с помощью памяти сервера, например 2048 МБ памяти сервера, 96 МБ PHP:
Например, 2048 МБ памяти сервера, 96 МБ PHP: зарезервируйте разумный объем для MySQL, который у вас может быть запущен, и других вещей, скажем, 512 МБ. Остается 1500 МБ / 96 МБ -> 15 параллельных запросов.
Ограничение Apache настраивается по-разному в зависимости от того, запускаете ли вы Apache mpm worker или prefork, или, может быть, вы используете PHP-FPM.
В результате этих изменений ваш веб-сайт будет по-прежнему работать медленно после перегрузки, и люди будут получать ошибки. Однако после того, как всплеск утихнет, Apache сразу же сможет снова обслуживать страницы.
В вашем примере, вероятно, произошло то, что у вас включено пространство подкачки, поэтому Apache начнет использовать диск в качестве памяти и будет в основном занят заменой памяти на диск и обратно