10

1 つの heroku dyno と dev データベースに対して、20 接続制限でいくつかのストレッチ (ab) テストを行っていました。

呼び出し中 (squeryl を使用してデータベースにアクセスすると、ヒープ割り当てが増加して R14 が発生します (メモリが 512MB 以上))

問題を再現できないようです (そのレベルでは、少なくともローカルでは)。

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

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

アップデート

コントローラーの最後で System.gc を実行すると、すべて問題なく動作が遅くなります...その呼び出しで多くのオブジェクトを作成しますが、heroku の JVM が gc を処理するべきではありませんか? また、gc 呼び出しを定期的にスケジュールすると、メモリが解放されません

4

2 に答える 2

5

Heroku でのメモリの問題のトラブルシューティングに関する優れた記事があります: https://devcenter.heroku.com/articles/java-memory-issues

あなたの場合、GC フラグを JAVA_OPTS に追加して、メモリの詳細を表示できます。次のフラグをお勧めします。

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

メモリに関する JMX からの情報がもう少し必要な場合は、プロセスに追加できる単純な Java エージェントもあります。さらに詳しく知りたい場合は、New Relic などの監視アドオンを調べることもできますが、フラグと Java エージェントで問題ないと思います。

于 2013-02-26T20:52:11.793 に答える
0

私もこの問題を抱えていて、ここで答えました。

同じ問題がありました。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 も設定する必要がありました。そうしないと、最小値と最大値に互換性がないというエラーが表示されました。Play2.2 は 384m 以上のデフォルトを使用していたと思います。

于 2014-04-29T02:19:37.110 に答える