Назад | Перейти на главную страницу

Apache с интерфейсом nginx получает 100% -ную привязку процессора к приложению Django

Недавно я запустил веб-приложение, которое постоянно загружает 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 продолжал обрабатывать запрос, когда пользователь остановил свою сторону соединения.