2012-11-13 4 views
10

20の接続制限で私のheroku dynoとdevデータベースにいくつかのストレッチ(ab)テストを行っていました。私は(少なくとも局所的にそのレベルで)問題を再現することができないようPlay2のスケーラでHerokuのメモリリーク

(squerylヒープ割り当てとそのアクセスデータベースは、R14(メモリ512メガバイト以上)を引き起こす増加している)通話中

herokuヒープダンプを取得し、それを分析してヒントを得る方法はありますか?

play2、scala、squeryl、herokuのメモリリークに関する既知の問題はありますか?

更新

私はすべてがうまくと遅くOFCであるように思わコントローラの終わりにSystem.gcをすれば...私はその呼び出しでオブジェクトの多くを作成しますが、HerokuののJVMは取るべきではありませんgcのケア?私はHerokuの上のトラブルシューティングメモリの問題のための素晴らしい記事があります定期的にない空きメモリ

+0

ストリーミング(返信チャンク)を使用していますか? – Schleichardt

+0

いいえ、私はしません。私はコントローラの最後にSystem.gcを実行すると、すべてがうまくいくと思います...その呼び出しでたくさんのオブジェクトを作成しますが、herokus JVMでgcを処理するべきではありませんか?また、定期的にgcコールをスケジュールするとメモリを解放しません。 – weakwire

+0

'Procfile'にデフォルトの' JAVA_OPTS'を使用していますか? –

答えて

5

GCコールをスケジュールする場合も: https://devcenter.heroku.com/articles/java-memory-issues

はあなたのケースでは、メモリの詳細を表示するJAVA_OPTSにGCフラグを追加することができます。私は、以下のフラグをお勧めしたい:

heroku config:add JAVA_OPTS="-Xmx384m -Xss512k -XX:+UseCompressedOops -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintGCDateStamps"

はあなたのメモリについてJMXからもう少し情報が必要な場合は、あなたのプロセスに追加することができ、簡単なJavaエージェントもあります。さらに深く掘り下げたいなら、New Relicのようなアドオンを監視することもできますが、フラグとJavaエージェントでうまくいくはずです。

0

私もこの問題を抱えており、hereと回答しました。

私は同じ問題がありました。 Herokuは、マシンには のメモリが不足していて、Java VMは実行されていないと伝えています。実際にHeroku Play 2.2にバグがあります。起動スクリプトはJAVA_OPTSではなくjava_optsを読み込みます。

私は両方を設定することで、それを修正:

heroku config:add java_opts='-Xmx384m -Xms384m -Xss512k -XX:+UseCompressedOops' 
heroku config:add JAVA_OPTS='-Xmx384m -Xms384m -Xss512k -XX:+UseCompressedOops' 

私も-Xmsを設定しなければならなかったそう、私はminとmax は互換性がありませんでしたというエラーを得ました。私はPlay2.2が 384mより高いデフォルトを使用していたと思います。

+0

FYI。これはもはや問題ではありません。 play 2.3アプリをデプロイし、JAVA_OPTSをうまく取り込みました。 –

関連する問題