芹菜节拍进程在启动时分配大量内存

Posted

技术标签:

【中文标题】芹菜节拍进程在启动时分配大量内存【英文标题】:Celery beat process allocating large amount of memory at startup 【发布时间】:2018-04-23 12:07:00 【问题描述】:

我在 Heroku 上使用 Celery 3.1.23 运行 Django 1.9 网站。 RabbitMQ 用作代理。

重启beat worker后,内存使用量始终在497Mb左右。这会导致频繁出现错误 R14(超出内存配额),因为它很快达到 512Mb 限制。

如何分析启动时内存中的内容? IE。重新启动时如何获取内存中的详细信息?

以下是使用 beta Heroku log-runtime-metrics 获得的内存消耗的详细信息:

heroku/beat.1:
source=beat.1 dyno=heroku.52346831.1ea92181-ab6d-461c-90fa-61fa8fef2c18
sample#memory_total=497.66MB
sample#memory_rss=443.91MB
sample#memory_cache=20.43MB
sample#memory_swap=33.33MB
sample#memory_pgpgin=282965pages
sample#memory_pgpgout=164606pages
sample#memory_quota=512.00MB 

【问题讨论】:

你解决了吗?我也有类似的症状。 【参考方案1】:

我遇到了同样的问题。环顾四周,我关注了How many CPU cores has a heroku dyno? 和Celery immediately exceeds memory on Heroku。

所以我输入了:

heroku run grep -c processor /proc/cpuinfo -a <app_name>

它返回了8。所以我在我的 Procfile 行中添加了--concurrency=4

worker: celery -A <app> worker -l info -O fair --without-gossip --without-mingle --without-heartbeat --concurrency=4

而且内存使用量似乎几乎被除以 2:

【讨论】:

以上是关于芹菜节拍进程在启动时分配大量内存的主要内容,如果未能解决你的问题,请参考以下文章

(三十二)线上调优

芹菜节拍服务旧(已删除)任务

操作系统主要功能

芹菜节拍不接周期性任务

Oracle内存管理(之四)

一个由进程内存布局异常引起的问题