mod_wsgi メモリリーク?

mod_wsgi メモリリーク?

私は、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_wsgiDjangoアプリがリークしているのではないかと思います。個人的には、メモリがリークしている証拠は一度も見つかりませんでしたmod_wsgiし、私は 6 台のmod_wsgiサーバーを運用しています。

しかし、Django は別の話です。これは巨大なプロジェクトであり、一部のモジュールではメモリ リークが発生します。ただし、既知の問題のほとんど (すべて?) は で修正されていますDjango 1.1+

それで... スクリプトの何かが漏れているのではないかと思います。問題を引き起こす可能性のある特定のコードを実行していますか? 具体的にどのようなテストを実行していますか? ? のような完全なサイト テストですかsiege? ? ? 1 ページでの簡単なテストですかab?

いずれにせよ、実行しているコードを提示し、次のような簡単な方法でメモリ リークがまだあるかどうかをテストしてください。

def hello_world(request):
    return HttpResponse('Hello World!', mimetype='text/plain')

関連情報