
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_wsgi
6개의 mod_wsgi
서버를 운영하고 있습니다.
그러나 Django는 다른 이야기입니다. 이는 거대한 프로젝트이며 일부 모듈에서는 메모리 누수가 발생할 수 있습니다. 그러나 알려진 문제의 대부분은 Django 1.1+
.
그래서... 내 생각엔 스크립트에 뭔가가 새고 있는 것 같아요. 문제를 일으킬 수 있는 특정 코드를 실행하고 있습니까? 정확히 어떤 종류의 테스트를 실행하고 있나요? 다음과 같은 전체 사이트 테스트 siege
? 아니면 1페이지에 대한 간단한 테스트인가요 ab
?
그럼에도 불구하고 실행 중인 코드를 표시하거나 다음과 같이 간단한 방법으로 여전히 메모리 누수가 있는지 테스트해 보세요.
def hello_world(request):
return HttpResponse('Hello World!', mimetype='text/plain')