LoginSignup
101
100

More than 5 years have passed since last update.

リソース監視・確認コマンド逆引きメモ(Java編)

Last updated at Posted at 2015-06-22

JVMのリソース監視、確認に使うコマンド集

以下はOracle Hotspot JVM version 1.7.0_79 、
OSはCentOS 6.3で確認したもの。

[root@localhost opt]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

[root@localhost opt]# cat /etc/issue
CentOS release 6.3 (Final)

JVMプロセスを表示したい。

とりあえずjpsコマンドを叩けば良い。
プロセスIDとプロセス名が表示される。

[root@localhost bin]# jps
2163 TestJavaProcess
2247 Jps

FullGC の起こった数を確認したい/JVMのメモリ使用率を確認したい

jstat -gcutil <PID> <interval> で確認する
使い方はvmstatコマンドと似ている。

大抵はFullGCが多発して処理が遅延して、慌ててjstatで確認するパターンが多い(気がする)

[root@localhost bin]# jstat -gcutil 2163
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
  0.00   0.00  12.57   0.00  14.25      0    0.000     0    0.000    0.000

FullGCの発生回数はFGCの項目を見ればよいが、他の項目の読み方は他のサイトにも書いているので割愛。

JVMに与えられた引数が知りたい。

jps -vで確認可能。

[root@localhost bin]# jps -v
2163 TestJavaProcess
2414 Jps -Dapplication.home=/usr/java/jdk1.7.0_79 -Xms8m

JVMのシステムプロパティを取得したい。

jinfo <PID> を使う。

[root@localhost bin]# jinfo 2163                                   
Attaching to process ID 2163, please wait...                       
Debugger attached successfully.                                    
Server compiler detected.                                          
JVM version is 24.79-b02                                           
Java System Properties:                                            

java.runtime.name = Java(TM) SE Runtime Environment                
java.vm.version = 24.79-b02                                        
sun.boot.library.path = /usr/java/jdk1.7.0_79/jre/lib/amd64        
(・・後略・・)

オブジェクトのメモリ使用量が知りたい

jmap -histo <PID> を使えば、各オブジェクトの使用している容量のヒストグラムが取得できる。
メモリリークを疑うときには取りえずこれを眺めてみると良いかもしれない。

[root@localhost bin]# jmap -histo 2163 | head

 num     #instances         #bytes  class name
----------------------------------------------
   1:          6658         857376  <methodKlass>
   2:          6658         788504  <constMethodKlass>
   3:           500         560392  <constantPoolKlass>
   4:           456         343360  <constantPoolCacheKlass>
   5:           500         336888  <instanceKlassKlass>
   6:          2017         195160  [C
   7:            32         167888  [I

メモリダンプを取得したい

jmap -dump:format=b,file=<filename> <PID> で取得できる。
ダンプしたツールはVisual VMや後述のjhatを使って解析できる。

[root@localhost bin]# jmap -dump:format=b,file=heap.bin 2163
Dumping heap to /usr/java/jdk1.7.0_79/bin/heap.bin ...
Heap dump file created

メモリダンプを解析したい

jhatが標準で付いていてお手軽。

[root@localhost bin]# jhat heap.bin
Reading from heap.bin...
Dump file created Mon Jun 22 16:59:44 CEST 2015
Snapshot read, resolving...
Resolving 8805 objects...
Chasing references, expect 1 dots.
Eliminating duplicate references.
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

上記の状態で、7000番ポートにhttpでアクセスすると
解析結果が表示される。

101
100
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
101
100