
У меня есть приложение 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.
Есть идеи?
решение1
На самом деле у меня есть сомнения, что 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')