2017-12-15 1 views
0

나는 다음과 같은 특성을 가진 디지털 오션 서버 (장고 나머지 프레임 워크에 내장) 장고 응용 프로그램을 실행하고 있습니다 :장고 응용 프로그램의 메모리 사용

  • 기가 바이트 RAM
  • 2 개의 CPU
  • 60기가바이트 운전

Gunicorn을 사용하여 Django 앱과 Celery를 실행하여 대기열을 관리합니다. 데이터베이스는 MySQL입니다.

CPU 사용량은 실제로는 적지 만 메모리 사용량은 많은 것으로 보입니다. 내가 배포 한 후

enter image description here

enter image description here

나는 python3 프로세스가 더 많은 메모리 (뭔가 약 75 %)을 사용하는 것으로 나타났습니다. 나는 다음과 같은 포함하는 after_deploy 스크립트를 실행하고 배포 할 때마다 :

service nginx restart 
service gunicorn restart 
chmod +x /mnt/myapplication/current/myapplication/setup/restart.sh 
source /mnt/env/bin/activate 
cd /mnt/myapplication/current/ 
pip3 install -r requirements.txt 
python3 manage.py migrate --noinput >> /mnt/migrations/migrations.log 
rm -f celerybeat.pid 
rm -f celeryd.pid 
celery -A myapplication beat -l info -f /var/log/celery/celery.log --detach 
celery -A myapplication worker -l info -f /var/log/celery/celery.log --detach 

은이 숫자는 예상하고 있습니까? 그리고 그렇지 않다면 어떻게 잘못 될지 조사 할 수 있습니까?

+0

python3 메모리 사용량은 장고에만 관련되어 있습니까? 셀러리는 또한 등록 할 수도있는 파이썬을 사용하기 때문에 숫자를 부 풀릴 수 있습니다. – Exelian

+0

저는 장고와 셀러리에만 python3을 사용하고 있습니다. – bla0009

답변

1

파이썬 프로세스는 할당 된 메모리를 유지하는 경향이 있습니다. 따라서 파이썬 프로세스 중 하나가 지정된 작업 (장고보기, 셀러리 작업 ...)에 많은 메모리를 할당하면 실제로 실행되는 동안 계속 유지됩니다 .

메모리 사용이 안정적으로 유지되는 (즉, 프로세스 시작 후 일정량 증가한 다음이 금액으로 유지됨) 서버가 스왑되지 않으면 프로세스가 계속 유지되므로 걱정할 필요가 없습니다. 이미 할당 된 메모리를 재사용 할 때.

이제 메모리 사용량이 계속 증가하고 있으며 어쩌면 어딘가에 메모리 누출이있을 수 있습니다.

는 실행 셀러리를 조심 - 또는 장고 FWIW - settings.DEBUG것이다 원인 메모리 누수로 - 그러나 이것은 또한 보안 문제로 어쨌든 설정 한`settings.DEBUG 플래그와 함께 생산 프로세스를 실행해서는 안됩니다.

그럴만 한 것이 아니라면 "파이썬 메모리 누수 디버깅"을 위해 인터넷 검색을 시작할 수 있습니다. here :

좋은 시작점을 찾을 수 있습니다. 파이썬 응용 프로그램이 메모리를 누출하는 것은 그리 쉽지 않습니다.

  • 일부 낮은 수준의 C 라이브러리는
  • 파이썬 코드를 유출 시간이 지남에 따라 성장하는 글로벌 목록 또는 dicts이있다, 당신은 거기
  • 사용 후 개체를 제거하는 것을 잊었다 : 일반적으로 이 세 가지 시나리오는

    : 앱이

here에서 일부 참조주기

특히 셀러리의 경우 셀러리 작업 프로세스 을 정기적으로 롤백 할 수 있습니다. 이것은 정확히 CELERYD_MAX_TASKS_PER_CHILD 설정이하는 것입니다.

+0

답변 해 주셔서 감사합니다. 그것은 여기서 시작해서 더 디버깅 할 수있을 것 같습니다. 감사! – bla0009

관련 문제