
私は、Nginx リバース プロキシ (静的コンテンツも提供) の背後にある Apache 2 (Worker) 上の mod_wsgi を介して django アプリを実行しています。アプリが同時に大量のヒットを受け取り始めると、メモリ使用量が <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 の背後にある 2 番目の Apache サーバーで負荷分散を試みましたが、あまり効果がありませんでした。
サーバーは Ubuntu 10.04 で、apache/mod_wsgi/nginx はすべて Ubuntu リポジトリからインストールされています。Django アプリは Django 1.2 で実行されています。
何か案は?
答え1
実際、リークが発生しているかどうかは疑問ですmod_wsgi
。Django
アプリがリークしているのではないかと思います。個人的には、メモリがリークしている証拠は一度も見つかりませんでしたmod_wsgi
し、私は 6 台のmod_wsgi
サーバーを運用しています。
しかし、Django は別の話です。これは巨大なプロジェクトであり、一部のモジュールではメモリ リークが発生します。ただし、既知の問題のほとんど (すべて?) は で修正されていますDjango 1.1+
。
それで... スクリプトの何かが漏れているのではないかと思います。問題を引き起こす可能性のある特定のコードを実行していますか? 具体的にどのようなテストを実行していますか? ? のような完全なサイト テストですかsiege
? ? ? 1 ページでの簡単なテストですかab
?
いずれにせよ、実行しているコードを提示し、次のような簡単な方法でメモリ リークがまだあるかどうかをテストしてください。
def hello_world(request):
return HttpResponse('Hello World!', mimetype='text/plain')