2013-04-03 11 views
8

ただ要求なしで座っていると、メモリが増え続け、最終的にメモリクォータを超えてしまいます。私が理解していないことがいくつかあります。未使用中にもメモリ割り当てがHerokuでエラーを超えたのはなぜですか? (play2/scala)

  1. なぜメモリ使用量が増加しないのですか?
  2. "Process running mem"の値はどこから来ていますか(ヒープとヒープ以外の使用法の数字の組み合わせの合計ではないようです)。
  3. JAVA_OPTS: -Xmx384m -Xss512k -XX:+UseCompressedOops -javaagent:heroku-javaagent-1.2.jar=stdout=trueがおすすめですが、なぜそれを超えていますか?

ここでは、この問題は、Herokuのに特定すべきではないと(理想的に)ローカルに再現することができるはずのログ・ファイルのサンプル

app/web.1: heroku-javaagent: JVM Memory Usage  (Heap): used: 275M committed: 349M max:349M 
app/web.1: heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1: heroku-javaagent: JVM Threads    : total: 37 daemon: 7 non-daemon: 21 internal: 9 
app/web.1: heroku-javaagent: JVM Memory Usage  (Heap): used: 276M committed: 349M max:349M 
app/web.1: heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1: heroku-javaagent: JVM Threads    : total: 37 daemon: 7 non-daemon: 21 internal: 9 
app/web.1: heroku-javaagent: JVM Memory Usage  (Heap): used: 277M committed: 349M max:349M 
app/web.1: heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1: heroku-javaagent: JVM Threads    : total: 37 daemon: 7 non-daemon: 21 internal: 9 
app/web.1: heroku-javaagent: JVM Memory Usage  (Heap): used: 277M committed: 349M max:349M 
app/web.1: heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1: heroku-javaagent: JVM Threads    : total: 37 daemon: 7 non-daemon: 21 internal: 9 
app/web.1: heroku-javaagent: JVM Memory Usage  (Heap): used: 278M committed: 349M max:349M 
app/web.1: heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1: heroku-javaagent: JVM Threads    : total: 37 daemon: 7 non-daemon: 21 internal: 9 
heroku/web.1: Process running mem=517M(101.1%) 
heroku/web.1: Error R14 (Memory quota exceeded) 
heroku/web.1: Process running mem=517M(101.1%) 
heroku/web.1: Error R14 (Memory quota exceeded) 
heroku/web.1: Process running mem=517M(101.1%) 
heroku/web.1: Error R14 (Memory quota exceeded) 
app/web.1: heroku-javaagent: JVM Memory Usage  (Heap): used: 212M committed: 349M max:349M 
app/web.1: heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1: heroku-javaagent: JVM Threads    : total: 37 daemon: 7 non-daemon: 21 internal: 9 
heroku/web.1: Process running mem=517M(101.1%) 
heroku/web.1: Error R14 (Memory quota exceeded) 
heroku/web.1: Process running mem=517M(101.1%) 
heroku/web.1: Error R14 (Memory quota exceeded) 
heroku/web.1: Process running mem=517M(101.1%) 
heroku/web.1: Error R14 (Memory quota exceeded) 
app/web.1: heroku-javaagent: JVM Memory Usage  (Heap): used: 213M committed: 349M max:349M 
app/web.1: heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1: heroku-javaagent: JVM Threads    : total: 37 daemon: 7 non-daemon: 21 internal: 9 
heroku/web.1: Process running mem=517M(101.1%) 
heroku/web.1: Error R14 (Memory quota exceeded) 
heroku/web.1: Process running mem=517M(101.1%) 
heroku/web.1: Error R14 (Memory quota exceeded) 
heroku/web.1: Process running mem=517M(101.1%) 
heroku/web.1: Error R14 (Memory quota exceeded) 
app/web.1: heroku-javaagent: JVM Memory Usage  (Heap): used: 213M committed: 349M max:349M 
app/web.1: heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1: heroku-javaagent: JVM Threads    : total: 37 daemon: 7 non-daemon: 21 internal: 9 
heroku/web.1: Process running mem=517M(101.1%) 
heroku/web.1: Error R14 (Memory quota exceeded) 
heroku/web.1: Process running mem=517M(101.1%) 
heroku/web.1: Error R14 (Memory quota exceeded) 
heroku/web.1: Process running mem=517M(101.1%) 
heroku/web.1: Error R14 (Memory quota exceeded) 
app/web.1: heroku-javaagent: JVM Memory Usage  (Heap): used: 214M committed: 349M max:349M 
app/web.1: heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1: heroku-javaagent: JVM Threads    : total: 37 daemon: 7 non-daemon: 21 internal: 9 
heroku/web.1: Process running mem=517M(101.1%) 
heroku/web.1: Error R14 (Memory quota exceeded) 
heroku/web.1: Process running mem=517M(101.1%) 
heroku/web.1: Error R14 (Memory quota exceeded) 
heroku/web.1: Process running mem=517M(101.1%) 
heroku/web.1: Error R14 (Memory quota exceeded) 

答えて

5

です。まず、私はHerokuのは、それ走るローカルと同じようにアプリケーションを実行することはお勧めします:target/startランチャーに

  • 起動を作成するために

    target/start -Dhttp.port=$PORT $JAVA_OPTS(あなたが好きに設定PORT)を使用してアプリ

    私はVisualVMのようなメモリプロファイラを使って、ローカルで実行中のアプリケーションに接続して、何が起こっているのかを確認します。

    これが機能しない場合や、Herokuでメモリ使用量をより詳しく調べたい場合は、log-runtime-metricsを有効にすることをおすすめします。これは、Log2Vizと共に使用して、リアルタイムのメモリの視覚化を取得することもできます。

  • 0

    Herokuのにログインランタイム・メトリックを有効にする:

    $ heroku labs:enable log-runtime-metrics 
    Enabling log-runtime-metrics for myapp... done 
    $ heroku restart 
    

    これはあなたが私は同じエラーメッセージを持っているログに

    heroku logs -t 
    

    https://devcenter.heroku.com/articles/log-runtime-metrics

    +0

    -1これはすでに6ヶ月前からのもう1つの回答で言及されており、追加の価値は追加されません。 –

    +0

    十分に私は最後の文を逃した。 – Skeep

    0

    をビューのメモリ使用量を行うことができますgrailsアプリケーション、私はこれを読んでarticle解決は簡単だったsystem.propertyファイルをルートこのjava.runtime.versionとフォルダ=コンテンツとして1.7、その後、私は、アプリケーションとエラーR14にその消え

    を再デプロイ私は

    2

    ちょうど同じような問題があった有用であると思います。問題をローカルで再現できませんでした。 ロギング設定にファイルアペンダーがあることが判明しました。ログに書き込むことでメモリが増えました。 大量のログを記録する小さなアプリを書くことで確認できます。ログランタイムメトリックを有効にすると、memory_cacheとmemory_totalが増加します。

    +0

    ロギング設定の詳細を共有できますか?それを防ぐためにHerokuができることはありますか? – codefinger