2017-12-07 13 views
0

私はJavaアプリケーションを実行しているLinuxマシンを持っています。 私はこれらのパラメータでjvmを実行しています:-Xmx27231m -Xms27231mJVM maxHeapSizeとInitialHeapSizeはhtopに反映されません

しかし、私はhtop/topを見ています。 システム全体とそのプロセスの具体的な内容は、jvmが27GBのヒープを実際に予約していないことです。 私が代わりに参照することになる 仮想環境:32.8G RES:15.3G SHR:16536すべての私の他のprod/QA/devのマシンで

はRESがヒープとして正確な量(多分もう少し)を反映size私はJVMに私のために予約するように求めています。 しかし、ある特定のマシンではそうではありません。 なぜこれが起こっているのか分かりません。

Java Mission Controlがそのプロセスに接続されていて、InitialHeapSizeとMaxHeapSizeが実際に正しい値を持つことがわかりましたが、タイプはCommandLineではなく人間工学です。私はそれが何を意味するのか本当に分かりません。

誰でも? ありがとう

+0

割り当てても使用していない場合、特にメモリ競合がある場合は、必ずしもすべてが常駐するとは限りません。 'Virt:32.8G'はメモリがすべてそこにあることを示していますが、すべてがスワップインされているわけではありません。 –

+0

スワップインはどういう意味ですか?私が持っているすべてのマシンで、ヒープのために設定したメモリの量は、RESがどのくらい表示されるかです。私はこのマシンを使用しています。割り当てはたくさんあります。 –

+0

RESは「居住者」です。メモリ競合がある場合、現在アクセスされていないメモリの一部をディスクにスワップアウトすることができます。これがスワップ空間全体のポイントです。そのシステムではほかに何が実行されていますか?それ以外はメモリが集中していますか? –

答えて

3

JVMは起動時間を短縮するために、事前にページをプリタッチしません。ただし、このオプションを使用すると強制的に使用できます。

-XX:+AlwaysPreTouch -Xmx27g -Xms27g 

ところでそれが使用されていない場合(JVMはめったにこの私の知る限りしませんが)これは戻ってOSにメモリを解放するJVMを防ぐことはできません、またそれはスワップを防ぐために、メインメモリにヒープをロックします。

ただし、特定の1つのマシンの場合はそうではありません。

ほとんどの場合、メモリを遅延させて使用するための適切なアクティビティはありませんでした。

関連する問題