Недавно я запустил веб-приложение, которое постоянно загружает 100% ЦП. Мой сервер - это Linode объемом 512 МБ с nginx, сидящим перед Apache (MPM Worker), обслуживающим приложение Django. Это приложение необычно тем, что ему приходится выполнять тяжелую обработку базы данных <5% времени (~ 2-5 тыс. Запросов / запрос). В настоящее время у меня только небольшое количество пользователей (50 в день, ~ 5-10 в любой момент времени). Теперь я понимаю, что выполнение нескольких тысяч запросов - это чрезмерно, и я ищу возможности его оптимизации, но я не понимаю, почему процессы Apache переходят на 100% и остаются там, даже если в настоящее время никто не посещает страницу с высокой загрузкой.
Вот часть моей конфигурации Apache:
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
Вот несколько моих первых строк «сверху»:
10257 www-data 20 0 370m 143m 4052 S 100 29.0 16:19.47 apache2
1 root 20 0 2728 224 24 S 0 0.0 0:01.34 init
2 root 20 0 0 0 0 S 0 0.0 0:00.00 kthreadd
Любая помощь приветствуется!
Оказалось, что это не проблема сервера. Был конкретный кодовый путь, который очень загружал процессор (в худшем случае это была операция O (n ^ 2)). Я отследил проблему, связавшись с конкретным пользователем бета-версии, у которого возникла проблема, скопировал их данные на свой промежуточный сервер и протестировал их. Я смог воспроизвести это и исправить оттуда.
Я все еще хотел бы знать, почему запрос Apache продолжал обрабатывать запрос, когда пользователь остановил свою сторону соединения.