
我有一個 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
這是 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 上運行。
有任何想法嗎?
答案1
我實際上懷疑是否mod_wsgi
洩漏了。我的猜測是您的Django
應用程式正在洩漏。我個人從未發現任何mod_wsgi
記憶體洩漏的證據,並且我運行了六台mod_wsgi
伺服器。
然而姜戈卻是一個不同的故事。這是一個巨大的項目,在某些模組中會出現一些記憶體洩漏。但大多數(全部?)已知問題已在Django 1.1+
.
所以...我猜測你的腳本中的某些內容正在洩漏。您是否運行任何可能導致問題的特定程式碼?您正在運行什麼樣的測試?完整的站點測試,例如siege
?或在一頁上進行簡單測試ab
?
無論如何,請顯示您正在運行的程式碼和/或測試您是否仍然存在記憶體洩漏,如下所示:
def hello_world(request):
return HttpResponse('Hello World!', mimetype='text/plain')