JConsole:Java監視與管理控制臺
通過JDK/bin目錄下的jconsole.exe啟動
1.內存監控:相當於可視化的jstat命令
監控區域有
PS Eden Space
PS Survivor Space
PS Old Space
Metaspace
Code Cache
Compressed Class Space
2.線程監控:相當於可視化的jstack命令
JHSDB:基於服務性代理的調試工具(java9)JCMD、JHSDB整合了上一篇的命令
HSDB圖形界面啟動方式
java9: jhsdb hsdb --pid LVMID
java8:在JDK/lib目錄下命令行執行:
java -cp ./sa-jdi.jar sun.jvm.hotspot.HSDB 或java -classpath "%JAVA_HOME%/lib/sa-jdi.jar" sun.jvm.hotspot.HSDB
點擊File-》Attach to Hotspot Process,輸入進程ID
Java Threads窗口:
1:Inspect Thread:查看選中的線程對應的java.lang.Thread對象,可層級查看,輸入地址查看
2:Stack Memery:查看當前線程的調用棧的內存,第一列是虛擬內存地址,第二列是該內存地址上的數據,第三列是對內存數據的注釋,Interpreted frame表示一個調用棧幀
3:show Java stack trace:顯示當前線程的調用鏈
4:Show thread infomation:查看指定線程的信息
5:find crashes:查找崩潰的線程
Tools 選項
1:Class Browser:查看類,可用完整類名查詢2:Code Viewer--根據內存地址查看信息
3:Computes Reserves ptrs:根據對象地址查找指向該對象的引用的地址
4:Deadlock Detection:用於死鎖檢測
5:Heap Paramters:顯示年輕代和老年代的內存地址範圍
6:Inspector:輸入對象的內存地址,可查看該對象的所有屬性信息
7:Monitor Cache Dump:查看當前進程使用的ObjectMonitor(用於synchronized 同步)的情況
8:Object Histogram:查看所有對象的對象數量及其佔用的內存空間的統計,可搜索指定類
windows選項
1:console:hsdb命令行控制臺,即hsdb的命令行版本CLHSDB
可用命令進入:
java -classpath "%JAVA_HOME%/lib/sa-jdi.jar" sun.jvm.hotspot.CLHSDB
有如下命令
threads
thread 1
classes
class com.test.A
inspect
jstack
universe: 同Heap Paramtersscanoops 指定地址範圍內搜索所有指定類型的所有實例
revptrs: 根據對象地址查看引用該對象的活躍對象的地址,這裡的引用是指通過類全局屬性(局部在線程中查看)
print: 輸入Klass*, Method*的地址,可以列印該類或者方法,效果等同於Code Viewer選項
where threadid: 查看線程調用棧,具體到方法
JAVA VisualVM(jvisualvm):
多合-故障處理工具
對性能影響小,需插件支持,插件網址訪問不了
通過JDK/bin目錄下的jvisualvm.exe啟動
基本功能
1: 監視--相當於可視化的jstat命令
2:線程--相當於可視化的jstack命令
3:抽樣器--主要查看實列分配數量,生產堆dump文件
4:prafiler--運行期間方法執行時間以及內存分析
抽樣器-堆dump,在左側對應進程下生成heapdump文件快照,可增量對比,可另存
Java Mission Contrlo(JMC):可持續在線的監控工具
通過JDK/bin目錄下的jmc.exe啟動
Java Flight Recorder(JFR)--飛行記錄儀:
內建在HotSpot虛擬機裡面的監控和基於事件的信息搜集框架,對性能影響小
JMC一方面作為JMX控制臺,顯示來自虛擬機MBean提供的數據;另一方面作為JFR的分析工具,展示來自JFR的數據
文件---連接前程序需要配置系統參數
elicpse debug configurations vm arguments
多個空格
-Dcom.sun.management.jmxremote=true -Djava.rmi.server.hostname=ip
// 本地不需要
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.managementote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder// 取消鎖定商業功能
JConsole,jvisualvm 連接遠程需要配置tomcat的catalina.sh配置文件或者命令運行jar指定參數
-Djava.rmi.server.hostname=ip
#遠程伺服器ip
-Dcom.sun.management.jmxremote
#開啟jmx
-Dcom.sun.management.jmxremote.port=999
#自定義jmx 埠號
-Dcom.sun.management.jmxremote.ssl=false # 是否需要ssl 安全連接方式
-Dcom.sun.management.jmxremote.authenticate=false
#是否需要秘鑰
上面的是不需要密碼的 生產環境不安全 如果想設置密碼
1.進入$JAVA_HOME/jre/lib/management把jmxremote.password文件的後綴去掉,然後修改至600權限
2.chmod 600 jmxremote.access 打開編輯到最後
#monitorRole ROF
#controlRole R&D
去掉# 保存 (前面是用戶名,後面是密碼 可自己修改 用戶在同目錄 jmxremote.access文件內定義,默認有2個用戶,可定義權限)