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 뒤의 두 번째 Apache 서버로 로드 밸런싱을 시도했지만 별로 도움이 되지 않은 것 같습니다.

서버는 ubuntu 저장소에서 apache/mod_wsgi/nginx가 모두 설치된 Ubuntu 10.04입니다. Django 앱은 Django 1.2에서 실행됩니다.

어떤 아이디어가 있나요?

답변1

mod_wsgi실제로 누출 이 의심됩니다 . 내 생각엔 당신의 Django앱이 유출되고 있는 것 같아요. 저는 개인적으로 메모리 누수에 대한 어떠한 증거도 발견하지 못했고 mod_wsgi6개의 mod_wsgi서버를 운영하고 있습니다.

그러나 Django는 다른 이야기입니다. 이는 거대한 프로젝트이며 일부 모듈에서는 메모리 누수가 발생할 수 있습니다. 그러나 알려진 문제의 대부분은 Django 1.1+.

그래서... 내 생각엔 스크립트에 뭔가가 새고 있는 것 같아요. 문제를 일으킬 수 있는 특정 코드를 실행하고 있습니까? 정확히 어떤 종류의 테스트를 실행하고 있나요? 다음과 같은 전체 사이트 테스트 siege? 아니면 1페이지에 대한 간단한 테스트인가요 ab?

그럼에도 불구하고 실행 중인 코드를 표시하거나 다음과 같이 간단한 방법으로 여전히 메모리 누수가 있는지 테스트해 보세요.

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

관련 정보