5

R14 エラーが発生しないように待機して、2X ワーカー dyno を使用しようとしましたが、これが結果です。

2013-06-04T13:03:30.723260+00:00 heroku[worker.1]: Process running mem=1047M(102.3%)
2013-06-04T13:03:30.723260+00:00 heroku[worker.1]: Error R14 (Memory quota exceeded)

ただし、ワーカーのタスクは正常に終了します。

質問:

  • ジョブに必要なメモリを減らすにはどうすればよいですか? - rmagick gem を使用して、画像のリストを単一のマルチページ pdf に変換しています。
  • 最終ジョブが正常に終了しているのに、(R14 エラーを伴う) このようなプロセスを維持することはどれほど危険ですか?

前もって感謝します

4

2 に答える 2

5

私は最終的に解決策を見つけました。問題はrmagickにありました。利用可能なすべてのメモリを取得します。1X の代わりに 2X ワーカー dyno を使用しても問題ありません。利用可能な最大リソースまで成長します。したがって、制限を設定する必要があります。しかし、私の場合、すべての制限が機能したわけではありません。

この方法で直接システムコールを行うことができます:

convert -limit memory 0 -limit map 0 list_of_input_files output_file

この方法では、メモリ キャッシュを使用せずに、ディスク キャッシュに直接アクセスします。これは、 heroku で R14 エラーを回避する唯一の方法です。同様または類似の他の組み合わせ-limit memory 32 -limit map 64では、常にエラーが発生しました。ここから着想を得ました。

もちろん、この行でいつでもrmagick ライブラリを使用できますが、私にはうまくいきませんでした。以前に説明した syscall アプローチを使用しました。

Magick.limit_resource(:memory, 0)
Magick.limit_resource(:map, 0)

更新:niceコマンドを使用して、優先度を高めました。改善されたようですが、最終的には R14 エラーが発生しますが、それほど頻繁ではないのは事実です (同じファイルでも!)。

于 2013-06-10T07:31:26.933 に答える