[英]Django application memory usage
我在Digital Ocean服務器上運行Django應用程序(基於Django Rest Framework構建),具有以下特征:
我正在使用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.