205

コマンドラインから Linux 上の Java アプリケーションのヒープサイズ (および使用メモリ) を確認するにはどうすればよいですか?

jmapを試してみました。しかし、それは情報を提供します。Eden/PermGen などの内部メモリ領域については、私には役に立ちません。

私は次のようなものを探しています:

  • 最大メモリ: 1GB
  • 最小メモリ: 256 MB
  • ヒープメモリ: 700 MB
  • 使用メモリ:460MB

それで全部です。これは JConsole などで確認できることはわかっていますが、コマンドラインで行う必要があります。(JMX などを有効にすることはできません)

4

17 に答える 17

177

各 Java プロセスにはpid、コマンドで最初に見つける必要がある がありますjps

pid を取得したらjstat -gc [insert-pid-here]、ガベージ コレクション ヒープの動作の統計を見つけるために使用できます。

  • jstat -gccapacity [insert-pid-here]メモリ プールの生成とスペース機能に関する情報を示します。

  • jstat -gcutil [insert-pid-here]各世代の使用率をその容量のパーセンテージとして表示します。使用状況を一目で把握するのに便利です。

Oracle のサイトのjstat ドキュメントを参照してください。

于 2012-10-09T14:44:29.563 に答える
99

このコマンドは、構成されたヒープ サイズをバイト単位で表示します。

java -XX:+PrintFlagsFinal -version | grep HeapSize

EC2 上の Amazon AMI でも動作します。

于 2014-03-01T00:19:15.177 に答える
57

Ubuntu と RedHat で動作するこれを試してください:

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

Windows の場合:

java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"

Mac用

java -XX:+PrintFlagsFinal -version | grep -iE 'heapsize|permsize|threadstacksize'

このすべてのコマンドの出力は、次の出力のようになります。

uintx InitialHeapSize                          := 20655360        {product}
uintx MaxHeapSize                              := 331350016       {product}
uintx PermSize                                  = 21757952        {pd product}
uintx MaxPermSize                               = 85983232        {pd product}
intx ThreadStackSize                           = 1024            {pd product}
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)

サイズを MB 単位で確認するには、値を (1024*1024) で割ります。

于 2016-08-04T05:31:59.517 に答える
35

ほとんどのツールが使用するJMXを使用せずに、実行できるのは使用することだけです。

jps -lvm

設定はコマンドラインオプションからのものであると推測します。

デフォルトでは、JMXなしでは動的情報を取得できませんが、これを行うための独自のサービスを作成することはできます。

ところで:私はJConsoleよりもVisualVMを使用することを好みます。

于 2012-10-09T10:09:26.933 に答える
4

Java ヒープ サイズに関しては、Linux では次を使用できます。

ps aux | grep java

また

ps -ef | grep java

-Xms、-Xmx を探して、指定された初期ヒープ サイズと最大ヒープ サイズを調べます。

ただし、対象の Java プロセスに -Xms または -Xmx がない場合は、Java プロセスがデフォルトのヒープ サイズを使用していることを意味します。次のコマンドを使用して、デフォルトのサイズを確認できます。

java -XX:+PrintFlagsFinal -version | grep HeapSize

または特定の jvm、たとえば、

/path/to/jdk1.8.0_102/bin/java -XX:+PrintFlagsFinal -version | grep HeapSize

バイト単位の InitialHeapSize と MaxHeapSize を探します。

于 2016-12-08T11:30:19.427 に答える
2

topコマンドの使用は、プログラムのメモリ使用量を確認する最も簡単な方法です。RES列は、プロセスによって占有されている実際の物理メモリを示しています。

私の場合、Java で 10g ファイルを読み込んでいて、毎回 outOfMemory 例外が発生しました。これは、RES列の値が-Xmxオプションで設定された値に達したときに発生しました。次に、オプションを使用してメモリを増やすと、-Xmxすべてがうまくいきました。

于 2015-12-15T17:50:02.567 に答える
1

jrockit を使用している場合は、jrcmd コマンド ライン ツールを試してください。例えば:

$ jrcmd 5127 print_memusage
5127:
Total mapped                  1074596KB           (reserved=3728KB)
-              Java heap       786432KB           (reserved=0KB)
-              GC tables        26316KB          
-          Thread stacks        13452KB           (#threads=34)
-          Compiled code         9856KB           (used=9761KB)
-               Internal          840KB          
-                     OS        15036KB          
-                  Other       146632KB          
-        Java class data        75008KB           (malloced=74861KB #103221 in 18709 classes)
- Native memory tracking         1024KB           (malloced=102KB #8)

heap_diagnostics などのその他のコマンドについては、「jrcmd help」を使用して一覧表示してください。

https://blogs.oracle.com/jrockit/entry/why_is_my_jvm_process_larger_t

于 2013-05-17T03:40:39.330 に答える