0

我已经在 Heroku 上运行了几个月没有问题的 Django 应用程序。不知何故,它变得非常缓慢/无响应,并且占用了大量内存。

New Relic 神秘地告诉我 98% 的加载时间是“应用程序代码(在 Render/base.html 中)”,但没有告诉我其他任何信息。据我所知,我们没有更改 base.html 中会导致其行为不同的任何内容。

还有其他人遇到这个问题吗?我该如何解决它/找到它的底部?

谢谢!

更新——我不能再将更改推送到 Heroku。它在超时之前停在“清理...”或“收集静态文件”(如果需要超过 15 分钟,Heroku 会终止编译)。

4

1 回答 1

0

虽然我不确定我是否完全理解问题的根本原因,但我解决了症状,我想在这里发帖,以便遇到相同问题的其他人需要帮助。

同时发生了两个不同的问题。

首先,我在每个测功机上运行了太多的 gunicorn 工人。他们吞噬了很多内存(原因我还不知道——Heroku 有点像黑匣子)并减慢了一切速度。更改我的 Procfile 以便每个测功机只有一个 gunicorn 工人解决了这个问题,至少现在是这样。

我的 Procfile 现在看起来像:

web: newrelic-admin run-program gunicorn myapp.wsgi --workers=1 --timeout=25

其次,事实证明我的 s3 存储桶中充满了我的应用程序自动生成的 > 100k JavaScript(我正在使用一个名为 django_compressor 的工具),当 Heroku 在部署期间运行 collectstatic 时,它试图检查 s3 上的任何内容是否发生了变化,需要它迭代超过 100k 个文件。这导致每次我尝试将新部署推送到 Heroku 时都会发生超时。

django_compressor 造成了这种情况,因为我不小心在 base.html 中包含了一个用于 {% compress js %} 标记内的其他 JavaScript 的块。

不要这样做:

{% compress js %}
<script src="..." />
<script src="..." />
{% block additionaljs %}{% endblock %} <--- BAD -- should be outside of the {% compress %} tags
{% endcompress %}  
于 2013-10-16T03:49:17.053 回答