herokuにデプロイされたレールアプリがあります。7 つのマネージャー オブジェクト (タスクごとに 1 つ) を連続して作成し、無限ループでそれらのメソッドを実行する 1 つのワーカー (jobs:work) があります。これはメインコードがどのように見えるかです (とにかくその重要な部分):
loop do
begin
Manager.subclasses.each do |manager_klass|
manager_klass.new.process
end
#exception handling here
end
sleep(1)
end
Model.all などのようなことを行うタスクはありません。ruby のリークと肥大化に関する多くの記事を読み、それらのほとんどを避けてきました。
ワーカーの Heroku ログには次のものが含まれます。R14 - メモリ クォータを超えました。
これは、約 3 時間のワーカー実行後に表示され始めます (これは、メモリ リーク/メモリ蓄積の実質的な証拠です)。
私は memprof (ruby 1.9 では動作しません)、bleak_house (関連のない情報を靴に入れる)、および Linux コマンドを使用してメモリ スナップショットをログに記録する他の gem (heroku では動作しません) を試しました。
これに関するstackoverflowのすべての回答を見てきましたが、何の助けにもなりません。
1 つの仕事で 7 人のマネージャーが働いているという私の特定のケースについて何かアイデアはありますか?