jvm(4)-虚拟机性能监控与故障处理工具
生活随笔
收集整理的這篇文章主要介紹了
jvm(4)-虚拟机性能监控与故障处理工具
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
【0】README
0.1)本文文字描述轉(zhuǎn)自 “深入理解jvm”,旨在了解?虛擬機性能監(jiān)控與故障處理工具的基礎(chǔ)知識(僅僅在于了解);
【1】概述 1)給一個系統(tǒng)定位問題的時候,知識,經(jīng)驗是關(guān)鍵基礎(chǔ),數(shù)據(jù)是依據(jù),工具是運用知識處理數(shù)據(jù)的手段。這里說的數(shù)據(jù)包括:運行日志,異常堆棧,GC日志,線程快照,堆轉(zhuǎn)儲快照等; 2)JDK的命令行工具:jdk 的bin 目錄是jdk的工具目錄,這些命令行工具大多數(shù)是 jdk/lib/tools.jar 類庫的一層薄包裝而已,它們主要的功能代碼是在 tools 類庫中實現(xiàn)的;
3)Sun JDK 監(jiān)控和故障處理工具
3.1)jps:虛擬機進程狀況工具(jps==jvm process status tool),它可以列出正在運行的虛擬機進程,并顯示虛擬機執(zhí)行主類名稱以及這些進程的本地虛擬機唯一ID;
3.2)jstat:虛擬機統(tǒng)計信息監(jiān)視工具(jstat==jvm statistics monitoring tool),用于監(jiān)視虛擬機各種運行狀態(tài)信息的命令行工具。他可以顯示本地或者遠程虛擬機進程中的類裝載,內(nèi)存,垃圾收集,JIT編譯等運行數(shù)據(jù),在沒有GUI的時候,它是運行期定位虛擬機性能問題的首選工具;
【1】概述 1)給一個系統(tǒng)定位問題的時候,知識,經(jīng)驗是關(guān)鍵基礎(chǔ),數(shù)據(jù)是依據(jù),工具是運用知識處理數(shù)據(jù)的手段。這里說的數(shù)據(jù)包括:運行日志,異常堆棧,GC日志,線程快照,堆轉(zhuǎn)儲快照等; 2)JDK的命令行工具:jdk 的bin 目錄是jdk的工具目錄,這些命令行工具大多數(shù)是 jdk/lib/tools.jar 類庫的一層薄包裝而已,它們主要的功能代碼是在 tools 類庫中實現(xiàn)的;
3)Sun JDK 監(jiān)控和故障處理工具
3.1)jps:虛擬機進程狀況工具(jps==jvm process status tool),它可以列出正在運行的虛擬機進程,并顯示虛擬機執(zhí)行主類名稱以及這些進程的本地虛擬機唯一ID;
3.2)jstat:虛擬機統(tǒng)計信息監(jiān)視工具(jstat==jvm statistics monitoring tool),用于監(jiān)視虛擬機各種運行狀態(tài)信息的命令行工具。他可以顯示本地或者遠程虛擬機進程中的類裝載,內(nèi)存,垃圾收集,JIT編譯等運行數(shù)據(jù),在沒有GUI的時候,它是運行期定位虛擬機性能問題的首選工具;
- 3.2.1)命令格式:?jstat [option vmid [interval [s|ms] [count]] ]
- 3.2.2)參數(shù)interval 和 count 表示查詢間隔 和 次數(shù),如果省略這兩個參數(shù),說明只查詢一次。如需要每250ms 查詢一次進程 2764 垃圾收集狀況,一共查詢20次,命名應(yīng)該是: jstat -gc 2764 250 20
- f1)實時地查看和調(diào)整虛擬機各項參數(shù)。使用jps命令的-v 參數(shù)可以查看jvm啟動時顯式指定的參數(shù)列表,但如果想知道未被顯式指定的參數(shù)的系統(tǒng)默認值,就只能使用 jinfo的-flag 選項進行查詢了;
- f2)jinfo還可以使用 -sysprops 選項把jvm 進程的 System.getProperties()的內(nèi)容打印出來;
- f3)jinfo加入了運行期修改參數(shù)的能力,可以使用 -flag[+|-] name 或 -flag name=value 修改一部分運行期可寫的jvm 參數(shù)值;(jinfo 在 windows平臺的功能有較大限制,只提供了最基本的-flag選項)
- 3.4.1)該命令用于生成堆轉(zhuǎn)儲快照(一般稱為 heapdump 或 dump文件)。
- 3.4.2)jmap的作用并不僅僅是為了獲取dump文件,它還可以查詢 finalize 執(zhí)行隊列,java堆和永久代的詳細信息;
- 3.4.3)jmap 工具主要選項
- 3.4.1)線程快照就是當前jvm 內(nèi)每一條線程正在執(zhí)行的方法堆棧的集合,生成線程快照的目的是 定位線程出現(xiàn)長時間停頓的原因,如線程間死鎖,死循環(huán),請求外部資源導(dǎo)致的長時間等待等都是導(dǎo)致線程長時間停頓的常見原因;
- 3.4.2)jstack命令格式:jstack [option] vimd
- 3.4.3)jstack 工具主要選項
- A1)若讀者使用的是Debug version 或 FastDebug version的HotSpot,那可以直接通過-XX:+PrintAssembly 指令使用插件;若使用的是 Product version的HotSpot,那還要額外加入一個 -XX:+UnlockDiagnosticVMOptions 參數(shù);
- 4.1.1)啟動JConsole: 雙擊在 JDK/bin 目錄下的jconsole.exe 文件,將自動搜索出本機運行的所有jvm 進程,不需要用戶自己來使用jps 查詢(雙擊后監(jiān)控該線程);
- 4.1.2)內(nèi)存監(jiān)控:內(nèi)存標簽相當于可視化的 jstat命令,用于監(jiān)控受收集器管理的虛擬機內(nèi)存(java堆和永久代)的變化趨勢;
- 4.1.3)線程監(jiān)控:線程標簽的功能相當于可視化的jstack命令,遇到線程停頓時可以使用這個標簽進行監(jiān)控分析;
- 4.2.1)作用(functions)
- f1)顯示虛擬機進程以及進程的配置,環(huán)境信息(jps,jinfo);
- f2)監(jiān)視應(yīng)用程序的CPU, GC, 堆, 方法區(qū)以及線程的信息(jstat、jstack);
- f3)dump 以及分析堆轉(zhuǎn)儲快照(jmap,jhat);
- f4)方法級的程序運行性能分析,找出被調(diào)用最多,運行時間最長的方法;
- f5)離線程序快照,收集程序的運行時配置,線程dump,內(nèi)存dump 等信息建立一個快照,可以將快照發(fā)送開發(fā)者處進行bug 反饋;
- f6)其他plugins 的無限可能性;(在對應(yīng)用程序進行檢測時,還需要加載相應(yīng)的插件);
總結(jié)
以上是生活随笔為你收集整理的jvm(4)-虚拟机性能监控与故障处理工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jvm(3)-垃圾收集器与内存分配策略
- 下一篇: 事务的状态(状态模式)