Как обрабатывать множество запросов на Apache-PHP Server, которые приводят к ошибке "Максимальное время выполнения"?
У меня есть музыкальный веб-сайт, созданный с помощью Laravel 5.0, и одна из опций позволяет пользователям создавать файлы LRC и сохранять текст LRC для других пользователей. Теперь с 8,000+ LRC я одновременно получаю от 50 до 130 пользователей. Некоторые запросы выполняются после загрузки страницы через ajax. Так как я начал получать примерно 20 000 - 27 000 просмотров страниц в день, некоторые запросы теряются в процессе очереди и Maximum execution time of 30 seconds exceeded
Исключение возникает во всех видах страниц и запросов.
Мой старый VPS на DigitalOcean: 4 ГБ оперативной памяти, 2 виртуальных ЦП. Я сам начинал получать ошибку 2 раза в день (20 000 просмотров), затем 10 и более раз (27 000 просмотров). Активность процессора составляла в среднем 80-90% соответственно, а загрузка памяти была невысокой. Поэтому я масштабировал VPS до 8 ГБ ОЗУ, 4vCPU. После этого время отклика сервера было примерно в 6 раз медленнее, а загрузка процессора - примерно 60% (22 000 просмотров страниц). Я связался с DigitalOcean, который предложил мне создать новый VPS и использовать прокси-сервер для пересылки запросов на старый VPS на новый, который я сделал на новый VPS. И новый VPS снова быстро светится.
Мой новый VPS на DO: 16GB RAM, 6vCPU. Загрузка процессора составляет 20% (22 000 просмотров в день). Но я все равно получаю ошибку, как раз в день. А из сообщения об ошибке там вроде 300-500 в день. Поэтому я решил настроить модуль Apache MPM Prefork в /etc/apache2/mods-enabled/mpm_prefork.conf
:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 300 #(From 150 to 300)
ServerLimit 300 #(new line added)
MaxConnectionsPerChild 0
</IfModule>
На новом VPS 16ГБ, средний запрос занимает 24,9МБ, чтобы я поставил MaxRequestWorkers
до 300.
Я действительно не понимаю, почему это все еще происходит, и теперь я уверен, что на моем сервере достаточно оперативной памяти и процессора, чтобы справиться со всем. Но, возможно, старый конфиг был для небольшой емкости, и теперь я должен изменить их, но я не знаю, к чему прикасаться. Может быть, MySQL RAM должен увеличиться и т.д.
Apache 2.4, PHP 5.6, MySQL 5.5.9, модуль PMP Prefork, Laravel 5.0