У меня есть приложение django, работающее через mod_wsgi на Apache 2 (Worker) за обратным прокси-сервером Nginx (также обслуживающим статический контент). Когда приложение начинает одновременно получать множество обращений, использование памяти резко возрастает с <20% до> 96%, и все приложение останавливается.
Вот мои конфигурации Apache WSGI:
WSGIDaemonProcess djangoboss user=django group=django processes=2 maximum-requests=500 threads=1 python-path=/home/django/django_env/lib/python2.6/site-packages display-name=%{GROUP}
WSGIProcessGroup djangoboss
WSGIScriptAlias / /home/django/django/wsgi/django_wsgi_handler.py
Вот вывод htop:
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
29551 django 20 0 793M 745M 6868 R 61.0 42.8 1:28.65 (wsgi:djangoboss) -k start
29550 django 20 0 793M 745M 6868 S 0.0 42.8 0:00.01 (wsgi:djangoboss) -k start
29549 django 20 0 793M 745M 6868 S 0.0 42.8 0:00.00 (wsgi:djangoboss) -k start
29548 django 20 0 793M 745M 6868 S 0.0 42.8 0:00.00 (wsgi:djangoboss) -k start
30778 django 20 0 192M 176M 6356 S 0.0 10.2 0:12.15 /home/django/django_env/bin/python /home/django/django/manage.py post_content
27544 django 20 0 86028 43160 6892 S 0.0 2.4 0:00.01 (wsgi:djangoboss) -k start
27545 django 20 0 86028 43160 6892 S 0.0 2.4 0:12.92 (wsgi:djangoboss) -k start
27542 django 20 0 86028 43160 6892 S 0.0 2.4 0:00.00 (wsgi:djangoboss) -k start
27543 django 20 0 86028 43160 6892 S 0.0 2.4 0:00.00 (wsgi:djangoboss) -k start
Я пробовал балансировать нагрузку со вторым сервером Apache за Nginx, но это не помогло.
Сервер - Ubuntu 10.04 с apache / mod_wsgi / nginx, установленным из репозиториев ubuntu. Приложение Django работает на Django 1.2.
Любые идеи?
Я действительно сомневаюсь, что mod_wsgi
протекает. Я предполагаю, что ты Django
приложение утекает. Я лично никогда не находил никаких доказательств mod_wsgi
утечка памяти, и я бегу с полдюжины mod_wsgi
серверы.
Django - это совсем другая история. Это огромный проект, и в некоторых модулях будет утечка памяти. Но большинство (все?) Известные проблемы были исправлены в Django 1.1+
.
Итак ... Я предполагаю, что что-то в вашем сценарии утекает. Вы запускаете какой-либо конкретный код, который может вызвать проблемы? Какой именно тест вы проводите? Полный тест сайта с чем-то вроде siege
? Или простой тест на 1 странице с ab
?
В любом случае, покажите код, который вы запускаете, и / или проверьте, есть ли у вас утечки памяти, с помощью чего-нибудь столь же простого:
def hello_world(request):
return HttpResponse('Hello World!', mimetype='text/plain')