错误R14(超出内存配额)在New Relic中不可见

时间:2012-08-22 18:53:00

标签: python django heroku

继续在Heroku上获得错误R14(超出内存配额)。

在本地分析django app上的内存我没有看到任何问题。我们已经安装了New Relic,除了一个奇怪的东西外,其他东西看起来还不错:

http://screencast.com/t/Uv1W3bjd

内存使用每个dyno徘徊在15mb左右,但由于某些原因,“dynos running”事物迅速扩展到10+。不确定这有什么意义,因为我们目前只在web dyno上运行。

我们也在运行芹菜,事情似乎也很正常(约15mb)。虽然它是可疑的,因为我相信我们在启动时就开始出现错误。

我们的一些请求确实需要一段时间,因为它们会向echosign发送肥皂请求,有时可能需要6-10秒才能响应。这是否会以某种方式阻止并导致新的dyno旋转?

这是我的proc文件:

web: python manage.py collectstatic --noinput; python manage.py compress; newrelic-admin run-program python manage.py run_gunicorn -b "0.0.0.0:$PORT" -w 9 -k gevent --max-requests 250
celeryd: newrelic-admin run-program python manage.py celeryd -E -B --loglevel=INFO

主要问题是内存错误。

1 个答案:

答案 0 :(得分:13)

我相信我可能已经找到了这个问题。

基于posts these,我认为我应该在9-10名炮兵工作人员的某个地方。我认为这是不正确的(至少,这是我的应用程序正在做的工作)。

我一直在运行9名枪手,终于意识到这是heroku和本地之间唯一真正的区别(就配置而言)。

根据gunicorn design document,对工人的建议是这样的:

  

请勿将工作人员数量扩展到您期望的客户数量   具有。 Gunicorn应该只需要4到12个工作流程来处理   每秒数百或数千个请求。

     

Gunicorn依靠操作系统来提供所有负载   处理请求时保持平衡。一般我们建议(2 x   $ num_cores)+ 1作为开始的工人数量。虽然没有   过于科学,公式是基于a的假设   给定核心,一个工作人员将从套接字读取或写入   而另一名工人正在处理请求。

虽然有关于Heroku Dyno CPU能力的信息,我现在已经读到每个dyno运行在1/4 Core左右的东西上。不是超级强大,但我想是足够强大。

将我的工作人员调到3 (根据他们粗略的公式甚至很高)似乎已经停止了我的记忆问题,至少目前是这样。当我想到它时,我会得到的有关内存警告的有趣之处是它永远不会上升。它达到了103%左右,然后只是停留在那里,而如果它实际上是一个泄漏,它应该一直上升,直到被关闭。所以我的理论是我的工作人员最终消耗的内存足以超过512mb。

HEROKU应该在某处添加这些信息!! 至少我应该top进入我正在运行的dyno,看看发生了什么。本来可以节省我几个小时和几天。