[總結]-第四章 虛擬機性能監控與故障處理工具

[總結]-第四章 虛擬機性能監控與故障處理工具

進入JDK安裝目錄java

cd $JAVA_HOME/bin
ls

輸出linux

appletviewer   javah          jjs            jvisualvm      schemagen
extcheck       javap          jmap           keytool        serialver
idlj           javapackager   jmc            native2ascii   servertool
jar            jcmd           jps            orbd           tnameserv
jarsigner      jconsole       jrunscript     pack200        unpack200
java           jdb            jsadebugd      policytool     wsgen
javac          jdeps          jstack         rmic           wsimport
javadoc        jhat           jstat          rmid           xjc
javafxpackager jinfo          jstatd         rmiregistry

工具命令spring

名稱 主要做用
jps JVM Process Status Tool,顯示指定系統內全部的HotSpot虛擬機進程
jstat JVM Statistics Monitoring Tool,用於收集HotSpot虛擬機各方面的運行數據
jinfo Configuration Info for Java,顯示虛擬機配置信息
jmap Memory Map for Java,生成虛擬機的內存轉出快照(heapdump文件)
jhat JVM Heap Dump Browser,分析heapdump文件,能夠在瀏覽器查看結果
jstack stack trace for java,顯示虛擬機的線程快照
jconsole Java監視與管理控制檯
jvisualvm 多合一故障處理工具

jps

jps

輸出瀏覽器

1794 Jps
1410 
1478 Launcher               ---> 這是IDEA工具啓動的服務
1479 DemoStartApplication   ---> 這是目標Java服務
1230 Bootstrap

能夠得知,當前的java服務的本地虛擬機惟一ID(LVMID)服務器

選項 做用
-q 只輸出LVMID
-m 輸出虛擬機進程啓動時傳遞給主類main()函數的參數
-l 輸出主類全名,若是進程執行的事jar包,輸出jar路徑
-v 輸出虛擬機進程啓動時JVM參數

比較經常使用的是 jpsjps -v微信

jstat

# option=操做,interval=間隔時間,count=操做次數
jstat [option] vmid [interval] [count]

例如app

jstat -gc 1479 250 2

輸出socket

S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
41984.0 41472.0  0.0    0.0   810496.0 130073.9  271872.0   53990.9   71552.0 67042.8 8320.0 7480.3     19    0.259   5      0.845    1.104
41984.0 41472.0  0.0    0.0   810496.0 130073.9  271872.0   53990.9   71552.0 67042.8 8320.0 7480.3     19    0.259   5      0.845    1.104

常見參數函數

選項 做用
-class 類裝載數量、卸載數量、總空間以及類狀態所消耗時間
-gc 監視Java堆容量情況,包括Eden、survivor、老年代、永久代等
-gccapacity 監視Java堆最大、最小空間
-gcutil 關注已使用空間佔總空間的百分比
-gccause 相似gcutil,額外輸出上次GC的緣由
-gcnew 新生代GC情況
-gcnewcapacity 與-gcnew相似,輸出主要關注使用到的最大、最小空間
-gcold 老年代GC情況
-gcoldcapacity 與-gcold相似,輸出主要關注使用到的最大、最小空間
-gcpermcapacity 輸出永久代使用到的最大、最小空間
-compiler 輸出JIT編譯過的方法和耗時
-printcompilation 輸出已經被JIT編譯的方法
-gcmetacapacity 元數據空間統計

jinfo

實時查看調整虛擬機各項參數。工具

選項 做用 案例
-flag 調整虛擬機參數 jinfo -flag +PrintGCDetails 1479
-flags 查看指定進程全部參數 jinfo -flags 1479
-sysprops 打印虛擬機進程系統內容 jinfo -sysprops 1479
無參 打印全部 jinfo 1479

例如

jinfo -flags 1479

輸出

Attaching to process ID 1479, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.144-b01
Non-default VM flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:CICompilerCount=4 -XX:InitialHeapSize=268435456 -XX:+ManagementServer -XX:MaxHeapSize=4294967296 -XX:MaxNewSize=1431306240 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 -XX:TieredStopAtLevel=1 -XX:+TraceClassLoading -XX:+TraceClassUnloading -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC 
Command line:  -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:51774,suspend=y,server=n -Dvisualvm.id=12693776008746 -Dserver.port=9988 -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=51773 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dfile.encoding=UTF-8

jmap

用於生成堆轉儲快照

  • jmap -dump 1479,輸出1479虛擬機的堆轉儲快照。
  • -XX:+HeapDumpOnOutOfMemoryError 讓虛擬機在出現OOM異常出現以後自動生成dump文件。
  • linux系統下經過Kill -3 命令發送進行退出信息「嚇唬」虛擬機輸出dump文件。

命令以下

選項 做用
-dump 生成堆轉儲快照,格式爲-dump:[live,]format=b,file=<filename>,不建議使用
-finalizerinfo 顯示在F-Queue中等待Finalizer線程執行finalize方法的對象
-heap 顯示java堆詳細信息,回收器種類、參數配置、分代情況等
-histo 顯示堆中對象統計信息,包括類、實例數量、合計容量,會先觸發GC,再統計信息,不建議使用
-permstat 查看永久代內存狀態,比較耗時,會暫停應用,不建議使用
-F 強制生成dump快照,當-dump失效時,再使用此命令

例如

jmap -dump:format=b,file=/Users/gy/Desktop/test 1479

輸出(成功) - 輸出的文件比較大,我這裏有320M

Dumping heap to /Users/gy/Desktop/test ...
Heap dump file created

輸出(失敗) - 能夠看出,沒有權限訪問,給目錄權限或者換個有權限的目錄。

Dumping heap to /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/test ...
Permission denied

jhat

虛擬機堆轉儲快照分析工具,這裏分析jmap堆轉儲快照的文件

  • 缺點:耗時、耗資源,通常不會再服務器上直接分析。一把使用其餘工具,好比VisualVM。
jhat /Users/gy/Desktop/test

輸出

Reading from /Users/gy/Desktop/test...
Dump file created Tue Aug 28 15:59:30 CST 2018
Snapshot read, resolving...
Resolving 3208138 objects...
Chasing references, expect 641 dots.......................
Eliminating duplicate references..........................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

瀏覽器訪問 http://localhost:7000

jstack

Java堆棧跟蹤工具,生成虛擬機當前時刻的線程快照(當前虛擬機內每一條線程正在執行的方法堆棧集合)

主要目的:定位線程出現長時間停頓的緣由,如線程間死鎖死循環請求外部資源致使的長時間等待等。

選項 做用 案例
-m 若是調用本地方法,則顯示C/C++的堆棧 jstack -m 1479
-l 除堆棧外,顯示關於鎖的附加信息 jstack -l 1479
-F 當正常輸出的請求不被響應時,強制輸出線程堆棧 jstack -F 1479

jconsole

# 啓動
./jconsole
  • 概覽
    • 堆內存使用量
    • 線程
    • CPU佔用率
  • 內存
    • 堆內存使用量
    • 非堆內存使用量(方法區)
    • 內存池「PS Old Gen」
    • 內存池「PS Eden Space」
    • 內存池「PS Survivor Space」
    • 內存池「Metaspace」
    • 內存池「Code Cache」
    • 內存池「Compressed Class Space」
  • 線程
    • 線程數圖表
    • 全部線程
    • 檢查死鎖
    • 已加裝當前類
    • 已加載類總數
    • 已卸載類總數
  • VM概要
VM 概要
2018年8月28日 星期二 下午01時59分33秒 CST

鏈接名稱: pid: 1479 com.raising.modules.DemoStartApplication
虛擬機: Java HotSpot(TM) 64-Bit Server VM版本 25.144-b01
供應商: Oracle Corporation
名稱: 1479@marshaldeMacBook-Pro.local
運行時間: 1 小時 47 分鐘
進程 CPU 時間: 49.067 秒
JIT 編譯器: HotSpot 64-Bit Tiered Compilers
總編譯時間: 3.258 秒
 
活動線程: 98
峯值: 101
守護程序線程: 34
啓動的線程總數: 176
已加裝當前類: 11,092
已加載類總數: 11,505
已卸載類總數: 413

當前堆大小: 129,701 KB
最大堆大小: 3,728,384 KB
提交的內存: 1,123,840 KB
暫掛最終處理: 0對象
垃圾收集器: 名稱 = 'PS MarkSweep', 收集 = 5, 總花費時間 = 0.844 秒
垃圾收集器: 名稱 = 'PS Scavenge', 收集 = 19, 總花費時間 = 0.259 秒
 
操做系統: Mac OS X 10.13.3
體系結構: x86_64
處理程序數: 8
提交的虛擬內存: 10,287,160 KB
總物理內存: 16,777,216 KB
空閒物理內存: 622,636 KB
總交換空間: 1,048,576 KB
空閒交換空間: 1,011,968 KB
 
VM 參數: ...
類路徑: ...
庫路徑: ...
引導類路徑: ...
  • MBean

jvisualvm

  • OQL控制檯
  • BTrace動態日誌跟蹤【插件】

博客

https://my.oschina.net/gmarshal

歡迎關注個人我的微信訂閱號:(聽說這個頭像程序猿專用)

輸入圖片說明

相關文章
相關標籤/搜索