0

Ubuntu Linux 3.2.0-25-virtual で Oracle Java 1.7.0_05 を使用し、7.5 GB のメモリを持つ amazon EC2 インスタンスで、それぞれにスイッチ -Xmx 2000m を使用して 3 つの Java インスタンスを開始します。

スワップ領域のないデフォルトの Ubuntu EC2 AMI 構成を使用します。

これらのインスタンスを数週間実行した後、そのうちの 1 つがフリーズします。おそらくメモリ不足です。しかし、私の質問は、メモリ リークを見つけることではありません。

アプリを再起動しようとすると、Java から 2000 MB のメモリを割り当てられないというメッセージが表示されます。サーバーを再起動することで問題を解決しました。

つまり、2000 + 2000 + 2000 > 7500?

この問題は 2 回発生しており、申し訳ありませんが、適切な診断ができていません。それぞれが最大 2000 MB を使用する Java プロセスが 2 つしか残っていない状態で、どのようにスペースが不足するのでしょうか? 次にこの問題が発生したときに、この問題をどのように診断する必要がありますか? ここに表示するために、プログラムを起動できないときに取得した「無料の -h」出力があればいいのにと思います。

ティア。

4

2 に答える 2

3

-Xmx は、プロセスの最大サイズではなく、JVM ヒープjavaの最大サイズを設定します。これにより、アプリケーションで使用可能なヒープ以外に、より多くのメモリが割り当てられます: 独自のメモリ、Permanent 世代、JNI ライブラリ内で割り当てられるものなど。

于 2012-09-12T13:45:50.300 に答える
1

他のプロセスがメモリを使用している可能性があるため、JVM を 2G で起動することはできません。3 つの Java プロセスごとにそれだけのメモリが本当に必要で、合計で 7.5 しかない場合は、EC2 構成を変更してより多くのメモリを使用することをお勧めします。カーネル、Oracleなどを含む他のすべてのために1.5を残すだけです。

于 2012-09-12T13:49:06.990 に答える