簡體   English   中英

Django應用程序內存使用情況

[英]Django application memory usage

我在Digital Ocean服務器上運行Django應用程序(基於Django Rest Framework構建),具有以下特征:

  • 4GB RAM
  • 2個CPU
  • 60 GB驅動器

我正在使用Gunicorn運行Django app和Celery來管理隊列。 數據庫是MySQL。

我可以看到CPU使用率非常低,但內存使用量似乎很大。

在此輸入圖像描述

在此輸入圖像描述

部署之后,我注意到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

這些數字是否有望? 如果沒有,我該如何調查出現了什么問題?

Python進程傾向於保留已分配的內存,因此如果你的某個python進程為給定的操作(一個Django視圖,一個芹菜任務......)分配了大量內存,只要它正在運行它就會保留它。

只要內存使用率保持穩定(我的意思是:在進程啟動后增長到一定數量然后保持這個數量)並且你的服務器沒有交換,通常沒有什么可擔心的,因為進程將繼續重用已經分配內存。

現在,如果您發現內存使用量一直在增長,那么您可能確實會在某處發生內存泄漏。

請注意,使用settings.DEBUG運行celery(或django FWIW) 導致內存泄漏 - 但是您永遠不應該使用`settings.DEBUG標志設置運行生產過程,因為這也是一個安全問題。

如果那不是你的情況,那么你可以開始在這里和網上的其他地方搜索“調試python內存泄漏”。 你可能會在這里找到一個很好的起點:

Python應用程序泄漏內存並不容易。 通常有三種情況:

  • 一些低級C庫正在泄漏
  • 您的Python代碼具有隨着時間推移而增長的全局列表或詞典,並且您忘記在使用后刪除對象
  • 您的應用中有一些參考周期

在這里

特別是對於芹菜,您可以定期滾動芹菜工人流程。 這正是CELERYD_MAX_TASKS_PER_CHILD設置的作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM