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

Как отследить утечку памяти с помощью wsgi, django, php и apache2?

Я использую 3 отдельных виртуальных хоста для своего веб-сайта (Django w / wsgi для основного сайта, еще один Django w / wsgi для мобильной версии сайта и третий для Wordpress, выступающего в качестве блога сайта). Через несколько недель объем памяти подкачки увеличивается до точки, при которой время загрузки и пинга становится очень медленным. Когда я смотрю на top, Я вижу, что есть несколько процессов Apache, каждый из которых занимает значительный объем памяти и выполняется не менее часа.

Это на сервере Ubuntu 10.04, работающем в облаке Rackspace (средний экземпляр).

Я запускаю два сайта django с wsgi в режиме демона (потоки = 1, процессы = 2).

Мои основные настройки apache2.conf выглядят следующим образом (с удалением нескольких "неактуальных" вещей, чтобы минимизировать размер этого сообщения - если вы ожидаете другого параметра, дайте мне знать, и я могу проверить, есть ли он там) :

Timeout 120
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>
<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>
<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

Одна вещь, которую я видел, предлагает перейти с Apache на «менее раздутый» веб-сервер. Я открыт для этой идеи, но предполагаю, что мне лучше всего переместить Wordpress с сервера, чтобы мне не понадобился PHP (или эти другие веб-серверы предлагают вместе решения на php и python?)

Дайте мне знать, если вам нужна дополнительная информация. Спасибо!

Используйте параметр display-name, как описано в документации mod_wsgi, чтобы пометить процессы демона mod_wsgi. Таким образом, с помощью «ps» вы сможете увидеть, действительно ли большие процессы являются процессами демона mod_wsgi.

http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcess

Если они достаточно толстые, то Apache или mod_wsgi тут ни при чем. Это произойдет потому, что ваши приложения сами по себе толстые. Это может быть из-за чрезмерного кэширования данных в памяти или утечки ресурсов.

Если помеченные процессы режима демона mod_wsgi не являются жирными, возможно, вы не делегировали приложениям Python для работы в процессах демона должным образом. Это или ваше приложение PHP является проблемой.

http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Embedded_Or_Daemon_Mode

Короче говоря, когда ваше приложение толстое, не имеет значения, какой механизм хостинга вы используете, они все равно будут толстыми, и Apache и mod_wsgi не имеют к нему никакого отношения, если вы не заполнили конфигурацию Apache.