Bob*_*ban 5 python django gunicorn
我在具有以下特征的 Digital Ocean 服务器上运行 Django 应用程序(基于 Django Rest Framework):
我正在使用 Gunicorn 运行 Django 应用程序和 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
Run Code Online (Sandbox Code Playgroud)
这些数字是预期的吗?如果没有,我该如何调查出了什么问题?
Python 进程倾向于保留分配的内存,因此如果您的一个 Python 进程为给定的操作(Django 视图、celery 任务......)分配了大量内存,它确实会在它运行时保留它。
只要内存使用保持基本稳定(我的意思是:在进程启动后增长到一定数量然后保持在这个数量)并且您的服务器不交换,通常没有什么可担心的,因为进程将继续重用已经分配的内存。
现在,如果您发现内存使用量一直在增长,那么您可能确实在某处存在内存泄漏。
请注意,运行 celery - 或 django FWIW -settings.DEBUG 会导致内存泄漏 - 但无论如何你都不应该在设置了 `settings.DEBUG 标志的情况下运行你的生产过程,因为这也是一个安全问题。
如果这不是您的情况,那么您可以开始在此处和网络上的其他地方搜索“调试 python 内存泄漏”。你可以在这里找到一个很好的起点:
Python 应用程序泄漏内存并不容易。通常有以下三种情况:
- 一些低级 C 库正在泄漏
- 您的 Python 代码具有随时间增长的全局列表或字典,并且您在使用后忘记删除这些对象
- 您的应用中有一些参考周期
和这里:
特别是对于 celery,您可以定期滚动 celery 工作进程。这正是 CELERYD_MAX_TASKS_PER_CHILD 设置所做的。
| 归档时间: |
|
| 查看次数: |
3297 次 |
| 最近记录: |