一、概述
性能診斷是軟件工程師在日程生活中需要經(jīng)常面對(duì)和解決的問(wèn)題
Java作為最流行的編程語(yǔ)言之一,其應(yīng)用性能診斷一直收到業(yè)內(nèi)廣泛關(guān)注。造成Java應(yīng)用出現(xiàn)性能問(wèn)題的因素非常多,例如線程控制,磁盤(pán)讀寫(xiě),數(shù)據(jù)庫(kù)訪問(wèn),網(wǎng)絡(luò)io,垃圾收集等。想要定位這些問(wèn)題,一款優(yōu)秀的性能診斷工具必不可少。
1、簡(jiǎn)單命令行工具
jdk的bin目錄下,有一系列的輔助命令行工具,這些輔助工具用來(lái)獲取 Jvm不同方面,不同層次的信息,幫助開(kāi)發(fā)人員很好的解決Java應(yīng)用程序的一些疑難雜癥。例如 jinfo 、jconsole、javap …
二、jps:查看正在運(yùn)行的Java程序(掌握)
1、是什么?
Java Process Status:用于查詢正在運(yùn)行的Java虛擬機(jī)進(jìn)程
2、測(cè)試
3、基本語(yǔ)法
1)options
如何將信息輸出到同級(jí)文件中:
語(yǔ)法:命令 > 文件名稱
例如:jps -l > a.txt
三、jstat:查看jvm統(tǒng)計(jì)信息(掌握)
1、是什么?
jstat (JVM statistics Monitor tool ): 用于監(jiān)視虛擬機(jī)各種運(yùn)行狀態(tài)信息的命令行工具。它可以顯示本地或者遠(yuǎn)程虛擬機(jī)進(jìn)程中的類裝載、內(nèi)存、垃圾收集、JIT編譯等運(yùn)行數(shù)據(jù)
在沒(méi)有GUI的圖形界面,只提供了純文本控制臺(tái)環(huán)境的服務(wù)器上,它將是運(yùn)行期間定位虛擬機(jī)性能問(wèn)題的首選工具,常用于檢測(cè)垃圾回收問(wèn)題以及內(nèi)存泄漏問(wèn)題
2、基本語(yǔ)法
基本語(yǔ)法: 使用jstat查看語(yǔ)法格式
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
其中vmid是進(jìn)程id號(hào),也就是jps之后看到的前面的號(hào)碼,如下:
1)options參數(shù)
-
-gc
其中S0C代表幸存者0區(qū)的總?cè)萘浚?br> S1C代表幸存者1區(qū)的總?cè)萘浚?br> S0U代表幸存者0區(qū)使用的容量,
S1U代表幸存者1區(qū)使用的容量,
EC代表伊甸園區(qū)的總?cè)萘浚?br> EU代表伊甸園區(qū)使用的總?cè)萘浚?br> OC代表老年代的總?cè)萘浚?br> OU代表老年代已經(jīng)使用的容量,
MC代表方法區(qū)的總?cè)萘浚?br> MU代表方法區(qū)的總?cè)萘浚?br> CCSC代表壓縮類的總?cè)萘浚?br> CCSU代表壓縮類使用的容量,
YGC代表年輕代垃圾回收的次數(shù),
YGCT年輕代進(jìn)行垃圾回收需要的時(shí)間,
FGC代表代表Full GC的次數(shù),
FGCT代表Full GC的時(shí)間,
GCT代表垃圾回收的總時(shí)間 -
-gccapacity舉例:jstat -gccapacity 13152,其中13152代表類的進(jìn)程id,執(zhí)行結(jié)果如下:
其中S0C代表幸存者0區(qū)的容量,
S1C代表幸存者1區(qū)的容量,
EC代表伊甸園區(qū)的容量,
CCSC代表壓縮類的容量,
YGC代表年輕代垃圾回收的時(shí)間,
FGC代表Full
GC垃圾回收的時(shí)間
- gcutil舉例:jstat -gcutil 13152,其中13152代表類的進(jìn)程id,執(zhí)行結(jié)果如下所示:
以上是各區(qū)域占比以及垃圾回收的情況,
S0代表幸存者0區(qū),
S1代表幸存者1區(qū),
E代表伊甸園區(qū),
O代表老年代,
M代表方法區(qū),
CCS代表壓縮類,以上這些值都是占比情況,
YGC代表年輕代垃圾回收的次數(shù),
YGCT年輕代進(jìn)行垃圾回收需要的時(shí)間,
FGC代表代表Full GC的次數(shù),
FGCT代表Full GC的時(shí)間,
GCT代表垃圾回收的總時(shí)間
2)-t 參數(shù)
可以在輸出信息前加上一個(gè) TimeStamp列,顯示程序的運(yùn)行時(shí)間。單位秒
【經(jīng)驗(yàn)】
jstat -gc -t 35812 1000
如果讓左邊框框中的某兩個(gè)值相減,假設(shè)這個(gè)值是num1,然后讓對(duì)應(yīng)右邊框框中的另外兩個(gè)值相減,假設(shè)這個(gè)值是num2,之后讓num2/num1,得出的差值就是上述所說(shuō)的GC時(shí)間占運(yùn)行時(shí)間的比例
3)-h
可以在周期性數(shù)據(jù)輸出時(shí),輸出多少行數(shù)據(jù)后輸出一個(gè)表頭信息
4)interval 參數(shù)
用于指定輸出統(tǒng)計(jì)數(shù)據(jù)的周期,單位為毫秒秒(查詢間隔)
5)count 參數(shù)
用于指定查詢的總次數(shù)
3、補(bǔ)充
四、jinfo:實(shí)時(shí)查看和修改JVM配置參數(shù)
1、是什么?
2、基本語(yǔ)法
查看
jinfo -flags 進(jìn)程id
查看曾經(jīng)賦過(guò)值的一些參數(shù)
jinfo -flag 參數(shù)名稱 進(jìn)程id
查看某個(gè)java進(jìn)程的具體參數(shù)信息
修改
針對(duì)boolean類型:jinfo -flag [+|-]參數(shù)名稱 進(jìn)程id
針對(duì)非boolean類型: jinfo -flag 參數(shù)名稱=參數(shù)值 進(jìn)程id
3、拓展
java -XX:+PrintFlagsInitial 查看所有JVM參數(shù)啟動(dòng)的初始值
java -XX:+PrintFlagsFinal 查看所有JVM參數(shù)的最終值
五、jmap:導(dǎo)出內(nèi)存映像文件 & 內(nèi)存使用情況
1、是什么?
2、基本語(yǔ)法
使用語(yǔ)法可以通過(guò)在DOS窗口中使用jmap/jmap -h/jmap -help查看
<executable 代表可執(zhí)行的代碼,比如使用> 文件名稱來(lái)指定生成的dump文件的生成位置
[server_id@]<……>是為遠(yuǎn)程連接準(zhǔn)備的
3、使用
1)導(dǎo)出內(nèi)存映像文件
手動(dòng)
jmap -dump:format=b,file=xxx.hprof pid
jmap -dump:live,format=b,file=xxx.hprof pid 【基本使用這個(gè)】
自動(dòng)
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=xxx.hprof
2、顯示堆內(nèi)存相關(guān)信息
jmap -heap 進(jìn)程id
jmap -histo 進(jìn)程id
4、小結(jié)
六、jhat (不使用了)
1、是什么?
2、基本語(yǔ)法
七、jstack 打印Jvm的線程快照
1、是什么
2、基本語(yǔ)法
參數(shù):option:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-668767.html
八、jcmd 多功能命令行
九、jstatd 遠(yuǎn)程主機(jī)信息收集
demo:
https://blog.csdn.net/huanqingdong/article/details/104095402/文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-668767.html
到了這里,關(guān)于性能調(diào)優(yōu)篇 二、Jvm監(jiān)控及診斷工具-命令行篇的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!