我有一个django应用程序运行在Apache 2(Worker)上的mod_wsgi上,在Nginx反向代理(也提供静态内容)后面。 当应用程序开始同时获得一堆命中时,内存使用量将从<20%增加到> 96%,整个应用程序将停止运行。
这里是我的Apache WSGIconfiguration:
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
我已经尝试了在Nginx之后的第二个Apache服务器进行负载均衡,但是这似乎没有多大帮助。
服务器是Ubuntu 10.04,其中apache / mod_wsgi / nginx都是从ubuntu的回收站安装的。 Django应用程序正在Django 1.2上运行。
有任何想法吗?
我真的有我的怀疑, mod_wsgi泄漏。 我的猜测是你的Django应用程序泄漏。 我个人从未发现有任何mod_wsgi泄漏内存的证据,我运行了六台mod_wsgi服务器。
然而Django是另外一回事。 这是一个巨大的项目,在一些模块中会有一些内存泄漏。 但是大多数(所有?)的已知问题已经在Django 1.1+ 。
所以…我猜你脚本里有东西在泄漏。 你是否运行任何可能导致问题的特定代码? 你究竟在做什么样的testing? 一个完整的现场testing,像siege ? 或者在ab页上进行一个简单的testing?
无论如何,请显示您正在运行的代码和/或testing是否仍然有内存泄漏,像这样简单的事情:
def hello_world(request): return HttpResponse('Hello World!', mimetype='text/plain')