6

Heroku で django-celery を使用して実行する簡単なタスクがあります。何かのようなもの:

@task
Simple_task():
    for line in csv.reader(origin):
        process_line(line)

process_line(line):
    fields = parse_line(line)
    reg = Model1() # Django model
    reg.field1 = fields[0]
    reg.field2 = fields[1]
    reg.field3 = fields[2]
    reg.save()

originは csv ファイルですファイルが大きい (50.000 行を超える) 場合、タスクはすべてのメモリを占有し、システムによってキャンセルされるまで (512 MB の使用可能なメモリの 150% で) R14 エラーが発生します。メモリが解放されることはなく、タスクを手動で再起動する必要があります。

Linux マシンで実行するか、開発マシンで職長と一緒に実行すると、問題なく完了します (全 170.000 行)。Heroku でのみメモリ リークが発生しているようです。ちなみにDEBUG=Falseで実行しています。

セロリ タスクの Heroku 実装で何かが壊れていますか? 欠けているものはありますか?これは、Heroku にデプロイする際の目玉となっています。

どんな助けでも大歓迎です。

4

2 に答える 2

0

あなたの場合、512MB以上のメモリを必要とするJoshBに同意します。

  • process_lineファイル全体を処理するタスクの代わりに、タスクを作成してそれらのキューを作成するとどうなりますか。その場合、Heroku のメモリが過負荷になることはありません。

  • 他に考えられる解決策は、dyno で 1GB の RAM を使用できる Heroku の新しいサービスです。リンク: 2x dynos ベータ版

于 2013-07-12T08:47:53.283 に答える
0

DEBUGDjango が に設定されてTrueいると、実行したすべての SQL ステートメントのコピーを保存するため、メモリ リークが発生します。

ホスティングと同じ仕様の仮想マシンを使用して、ローカルでテストできます。または、ulimitを使用してプロセス メモリを制限します。このようにして、ローカルでコードが 512MB の RAM のみで動作するかどうかを確認できます。

于 2013-08-30T16:21:48.387 に答える