1. 程式人生 > >作業8:常用java命令(二)

作業8:常用java命令(二)

col ota rop 例子 error oracle code ref 信息

一、jinfo(Configuration Info for Java)

1、功能:jinfo可以實時地查看和調整虛擬機的各項參數。

2、參數:

選項 作用
-flag name 打印改名字的VM設置
-flag +|- name 是否打印某個VM設置
-flag name=value 設置某個VM設置為某個值
-sysprops 打印系統中所有Java設置
-flags 打印所有VM設置
打印所有的VM和系統的Java設置

3、例子

$ jinfo -flags 8472
VM Flags:
-XX:CICompilerCount=4 -XX:ConcGCThreads=2 -XX:G1ConcRefinementThreads=8 -XX:G1HeapRegionSize=1048576 -XX:InitialHeapSize=268435456 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=734003200 -XX:MaxNewSize=440401920 -XX:MinHeapDeltaBytes=1048576 -XX:NonNMethodCodeHeapSize=5835340 -XX:NonProfiledCodeHeapSize=122911450 -XX:ProfiledCodeHeapSize=122911450 -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocation

# 截取片斷
$ jinfo -sysprops 8472
Java System Properties:
#Sat Jul 28 15:29:42 CST 2018
sun.desktop=windows
awt.toolkit=sun.awt.windows.WToolkit
java.specification.version=10
file.encoding.pkg=sun.io
sun.cpu.isalist=amd64
sun.jnu.encoding=GBK
java.class.path=D\:/software/IntelliJ IDEA 2018.1.1/lib/jps-launcher.jar;E\:/develop/software/java10/jdk/lib/tools.jar;D\:/software/IntelliJ IDEA 2018.1.1/lib/optimizedFileManager.jar
java.vm.vendor="Oracle Corporation"
jdt.compiler.useSingleThread=true
sun.arch.data.model=64
kotlin.incremental.compilation=true
user.variant=
kotlin.daemon.client.alive.path="C\:\\Users\\HBKJ\\AppData\\Local\\Temp\\kotlin-idea-4911978126183262642-is-running"
java.vendor.url=http\://java.oracle.com/

二、jstat(JVM Statistics Monitoring Tool)

1、功能:jstat用於監視JVM各種運行狀態信息的命令行工具。可以顯示本地或遠程JVM進程中的類裝載、內存、垃圾收集、JIT編譯等運行數據。

2、參數:

選項 作用
-class 監視類加載、卸載數量、總空間以及類狀態所耗費的時間
-gc 監視Java Heap狀態,包含Eden、S0、S1、Old、MetaSpace等容量、已用空間、GC耗費時間合計等信息
-gcutil 與gc類似,關註已使用空間占總空間的占比
-gccause 與gcutil類似,額外輸出導致上次GC的原因
-gcnew 監視新生代GC的狀況
-gcold 監視老年代GC的狀況
-gccapacity 與gc類似,關註Java堆各個區域使用到的最大和最小空間
-gcnewcapacity 與gcnew類似,關註新生代使用到的最大和最小空間
-gcoldcapacity 與gcold類似,關註老年代使用到的最大和最小空間
-gcmetacapacity 與gc類似,關註MetaSpace使用到的最大和最小空間
-compiler 輸出JIT編譯器編譯過的方法、耗時等信息
-printcompilation 輸出已經被JIT編譯的方法

3、例子

$ jstat -gcnew 8472 1000 3
 S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
   0.0 2048.0    0.0 2048.0 15  15 3584.0  97280.0   9216.0      3    0.009
   0.0 2048.0    0.0 2048.0 15  15 3584.0  97280.0   9216.0      3    0.009
   0.0 2048.0    0.0 2048.0 15  15 3584.0  97280.0   9216.0      3    0.009

$ jstat -gcnewcapacity 8472 1000 1
  NGCMN      NGCMX       NGC      S0CMX     S0C     S1CMX     S1C       ECMX        EC      YGC   FGC
       0.0   716800.0    99328.0      0.0      0.0 716800.0   2048.0   716800.0    97280.0     3     0

$ jstat -gccause 8472 1000 1
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC
  0.00 100.00   9.47  17.63  97.47  92.84      3    0.009     0    0.000    0.009 Metadata GC Threshold No GC

$ jstat -gcutil 8472 1000 1
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
  0.00 100.00   9.47  17.63  97.47  92.84      3    0.009     0    0.000    0.009

$ jstat -class 8472 1000 1
Loaded  Bytes  Unloaded  Bytes     Time
  3622  7032.7        0     0.0       1.22
  3622  7032.7        0     0.0       1.22
  
$ jstat -compiler 8472 1000 1
Compiled Failed Invalid   Time   FailedType FailedMethod
    1640      1       0     1.63          1 java/util/concurrent/ConcurrentHashMap putVal

$ jstat -printcompilation 8472 1000 1
Compiled  Size  Type Method
    1640     49    1 io/netty/util/internal/shaded/org/jctools/queues/atomic/BaseLinkedAtomicQueue isEmpty

三、jmap(Memory Map for Java)

1、功能:jmap用於生成堆轉儲快照(headdump或dump文件)。

2、生成dump文件的方法

  • jmap
  • -XX:HeapDumpOnOutOfMemoryError,JVM發生OOM異常自動生成
  • -XX:HeapDumpOnCtrlBreak參數,運行期間 Ctrl+Break 生成
  • Linux系統下通過kill -3 生成

3、選項

選項 作用
-clstats 打印類加載器的狀態
-finalizerinfo 打印在F-Queue等待Finalizer線程執行finalize方法的對象
-histo[:live] 打印堆中對象統計信息,如類、實例數量和合計容量
-dump 顯示堆詳細信息,如使用哪種回收器、參數配置、分代狀況等
額外:live 只輸出存活對象
額外:format=b 二進制格式(文件小)
額外:file=filename 輸出文件

4、例子

# 截取片斷
$ jmap -clstats 8472 
Index Super InstBytes KlassBytes annotations   CpAll MethodCount Bytecodes MethodAll   ROAll    RWAll    Total ClassName
    1    -1  24694880        472           0       0           0         0         0      24      584      608 [B
    2    -1   1305288        472           0       0           0         0         0      24      584      608 [I
    3    11    461040        640           0   21624         132      5437     47840   23488    48432    71920 java.lang.Class
    4    11    405576        584         128   13056         103      4108     51560   17416    49168    66584 java.lang.String
    5    -1    372136        472           0       0           0         0         0      24      584      608 [Ljava.lang.Object;
    6    11    343424        560           0    1352           9       213      2760    1488     3520     5008 java.util.concurrent.ConcurrentHashMap$Node
    7    -1    150464        472           0       0           0         0         0      24      584      608 [C
    8    11    148000        552           0    1376           7       149      1856    1152     2952     4104 java.util.HashMap$Node
    9  2532    135280        528           0     688           3        56      1848     472     2776     3248 java.lang.ref.SoftReference
   10    -1    101840        472           0       0           0         0         0      32      584      616 [Ljava.util.concurrent.ConcurrentHashMap$Node;
   11    -1     91200        488           0    1272          14       109      3408    1528     3872     5400 java.lang.Object
   12     9     69840        544           0     520           2        17       792     336     1704     2040 sun.util.locale.LocaleObjectCache$CacheEntry
   13    -1     66272        472           0       0           0         0         0      32      584      616 [Ljava.util.HashMap$Node;

$ jmap -finalizerinfo 8472
No instances waiting for finalization found

# 截取片斷
$ jmap -histo 8472
 num     #instances         #bytes  class name (module)
-------------------------------------------------------
   1:         18142       24747712  [B ([email protected])
   2:          1378        2076168  [I ([email protected])
   3:          3874         463096  java.lang.Class ([email protected])
   4:         17191         412584  java.lang.String ([email protected])
   5:          3616         376776  [Ljava.lang.Object; ([email protected])
   6:         10755         344160  java.util.concurrent.ConcurrentHashMap$Node ([email protected])
   7:           183         152336  [C ([email protected])
   8:          4625         148000  java.util.HashMap$Node ([email protected])

# 生成dump文件可以用jhat分析
# 借助其他網站的在線分析工具
# jvisualvm分析
# windbg分析等
$  jmap -dump:live,format=b,file=heap.bin 8472
Heap dump file created

四、jhat(JVM Heap Analysis Tool)

1、功能:分析jmap生成的堆轉儲快照。

2、例子

$ jhat heap.bin
通過瀏覽器查看即可

3、其他好用的堆轉儲快照分析工具

  • IBM Memory Analyzer
  • Eclipse Memory Analysis
  • jvisualvm

作業8:常用java命令(二)