Celery 击败进程在启动时分配大量内存

Pau*_*oon 3 memory django heroku rabbitmq celery

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

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

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

以下是使用 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 
Run Code Online (Sandbox Code Playgroud)

one*_*sec 5

我有同样的问题。四处搜索,我关注了heroku dyno有多少个CPU核心?Celery立即超过了 Heroku 上的内存

所以我输入:

heroku run grep -c processor /proc/cpuinfo -a <app_name>
Run Code Online (Sandbox Code Playgroud)

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

worker: celery -A <app> worker -l info -O fair --without-gossip --without-mingle --without-heartbeat --concurrency=4
Run Code Online (Sandbox Code Playgroud)

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

说明更改后 Heroku 上工作器 Dyno 的内存使用情况的屏幕截图