Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 错误R14(超出内存配额)在New Relic中不可见_Python_Django_Heroku - Fatal编程技术网

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

Python 错误R14(超出内存配额)在New Relic中不可见,python,django,heroku,Python,Django,Heroku,在Heroku上不断获取错误R14(超出内存配额) 在本地评测django应用程序的内存时,我没有发现任何问题。我们安装了New Relic,那里的情况似乎很好,除了一个奇怪的地方: 每个dyno的内存使用量大约为15mb,但由于某些原因,“dynos running”功能很快扩展到10+。不知道这有什么意义,因为我们目前只在WebDyno上运行 我们还经营芹菜,那里的情况看起来也很正常(大约15mb)。虽然这是可疑的,因为我相信我们开始有错误时,这启动 我们的一些请求确实需要一段时间,因为它

在Heroku上不断获取错误R14(超出内存配额)

在本地评测django应用程序的内存时,我没有发现任何问题。我们安装了New Relic,那里的情况似乎很好,除了一个奇怪的地方:

每个dyno的内存使用量大约为15mb,但由于某些原因,“dynos running”功能很快扩展到10+。不知道这有什么意义,因为我们目前只在WebDyno上运行

我们还经营芹菜,那里的情况看起来也很正常(大约15mb)。虽然这是可疑的,因为我相信我们开始有错误时,这启动

我们的一些请求确实需要一段时间,因为它们对echosign执行soap请求,有时需要6-10秒才能响应。这是否以某种方式阻碍并导致新的dyno的旋转

这是我的程序文件:

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

主要的问题是内存错误。

我相信我可能已经找到了问题所在

基于相似性,我认为我应该有9-10名gunicorn工人。我认为这是不正确的(或者至少是因为我的应用程序正在做的工作)

我一直在运行9个gunicorn workers,最终意识到这是heroku和local(就配置而言)之间唯一的真正区别

根据这份报告,对工人的建议是这样的:

不要将员工数量与您期望的客户数量进行比例调整 有。Gunicorn只需要4-12个工作进程即可处理 每秒有数百或数千个请求

Gunicorn依靠操作系统提供所有负载 处理请求时进行平衡。通常我们建议(2 x $num_cores)+1作为开始时的工人数量。而不是 由于过于科学,该公式基于以下假设: 给定core,一个worker将从套接字读取或写入 而另一个工作进程正在处理请求

虽然有关于Heroku Dyno CPU能力的信息,但我现在读到,每个Dyno都运行在大约1/4内核上。不是超级强大,但我想已经足够强大了

将我的员工人数调低到3人(根据他们的粗略公式,这个数字甚至很高)似乎已经解决了我的记忆问题,至少目前是这样。当我想起来的时候,我会得到一个关于记忆警告的有趣的事情是它永远不会上升。它达到了103%左右,然后一直保持在那里,而如果它实际上是一个泄漏,它应该一直上升,直到被关闭。所以我的理论是,我的工作人员最终消耗的内存刚好足够512mb以上


HEROKU应该在某处添加此信息而且至少我应该能够
top
进入我正在运行的dyno,看看发生了什么。本可以为我节省数小时和数天。

NewRelic中显示的“实例”似乎也与我的gunicorn工人有着几乎直接的联系,这很奇怪。我还相当肯定内存表在这种配置中基本上是无用的。NewRelic中的dynos选项卡将用于Python站点,实际上反映运行代理的进程数。该页面继承自最初的Heroku设置,其中一个dyno实际上是一个Ruby进程,因此每个dyno只有一个代理。该页面仍然需要更新,但Heroku实际上没有提供一种方法来知道实际有多少Dyno。所以佩奇现在有点困惑。用运行代理的“进程”替换“dynos”,这样做更有意义。