Apache-2.2
mod_wsgi 記憶體洩漏?
我有一個 django 應用程序在 Nginx 反向代理(也提供靜態內容)後面的 Apache 2(Worker)上通過 mod_wsgi 執行。當應用程序開始同時獲得大量點擊時,記憶體使用量將從 <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
這裡 to 是 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+
.所以……我猜你的腳本中的某些東西正在洩漏。您是否正在執行任何可能導致問題的特定程式碼?你到底在執行什麼樣的測試?一個完整的站點測試,例如
siege
?還是在 1 頁上進行簡單測試ab
?無論如何,請顯示您正在執行的程式碼和/或測試您是否仍然存在記憶體洩漏,如下所示:
def hello_world(request): return HttpResponse('Hello World!', mimetype='text/plain')