0

Heroku で Django アプリを数か月間問題なく実行しています。どこからともなく、非常に遅くなり、応答しなくなり、大量のメモリを消費しています。

New Relic は、ロード時間の 98% が「(Render/base.html 内の) アプリケーション コード」であることを不可解に教えてくれますが、それ以外は何も教えてくれません。私が知る限り、base.html の動作を変えるような変更は何もしていません。

他の誰かがこの問題に遭遇しましたか? どうすればトラブルシューティングを行うことができますか?

ありがとうございました!

更新-- Heroku に変更をプッシュできなくなりました。タイムアウトになる前に、「Cleaning up...」または「Collecting static files」のいずれかで停止します (15 分以上かかる場合、Heroku はコンパイルを強制終了します)。

4

1 に答える 1

0

問題の根本的な原因を完全に理解しているかどうかはわかりませんが、症状を解決しました。同じ問題に遭遇した他の誰かが助けを必要とするように、ここに投稿したいと思いました.

2 つの別々の問題が同時に発生していました。

まず、各 dyno であまりにも多くの Gunicorn ワーカーを実行していました。彼らは大量の RAM を食い尽くし (理由はまだわかりませんが、Heroku はちょっとしたブラック ボックスです)、すべてを遅くしました。Procfile を dyno ごとに 1 つの Gunicorn ワーカーだけになるように変更すると、少なくとも今のところ、その問題は解決しました。

私のProfileは次のようになります。

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

次に、私の s3 バケットは、私のアプリが自動的に生成する 10 万個を超える 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 に答える