继续在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
主要问题是内存错误。
答案 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,看看发生了什么。本来可以节省我几个小时和几天。