JVM性能调优监控工具总结
JDK本身提供了很多方便的JVM性能調(diào)優(yōu)監(jiān)控工具,有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具.
?
1.jps(Java Virtual Machine Process Status Tool)
最常用的就是 jps -mlvV
jps主要用來(lái)輸出JVM中運(yùn)行的進(jìn)程狀態(tài)信息。語(yǔ)法格式如下:
jps [options] [hostid]
如果不指定hostid就默認(rèn)為當(dāng)前主機(jī)或服務(wù)器。
命令行參數(shù)選項(xiàng)說(shuō)明如下:
-q 不輸出類(lèi)名、Jar名和傳入main方法的參數(shù)
-m 輸出傳入main方法的參數(shù)
-l 輸出main類(lèi)或Jar的全限名
-v 輸出傳入JVM的參數(shù)
?
2.jstack
最常用的用法有兩種:
jstack 1234
jstack -m 1234 #native+java棧
?
jstack主要用來(lái)查看某個(gè)Java進(jìn)程內(nèi)的線程堆棧信息。語(yǔ)法格式如下:
jstack [option] pid
jstack [option] executable core
jstack [option] [server-id@]remote-hostname-or-ip
命令行參數(shù)選項(xiàng)說(shuō)明如下:
-l long listings,會(huì)打印出額外的鎖信息,在發(fā)生死鎖時(shí)可以用jstack -l pid來(lái)觀察鎖持有情況
-m mixed mode,不僅會(huì)輸出Java堆棧信息,還會(huì)輸出C/C++堆棧信息(比如Native方法)
jstack可以定位到線程堆棧,根據(jù)堆棧信息我們可以定位到具體代碼,所以它在JVM性能調(diào)優(yōu)中使用得非常多。
?
3.jinfo
最常用用法:jinfo -flags 1234
可以輸出并修改運(yùn)行時(shí)的java 進(jìn)程的opts。用處比較簡(jiǎn)單,就是能輸出并修改運(yùn)行時(shí)的java進(jìn)程的運(yùn)行參數(shù)。用法是jinfo -opt pid 如:查看1234的MaxPerm大小可以用 jinfo -flag MaxPermSize 1234
?
4.jmap(Memory Map)和jhat(Java Heap Analysis Tool)
最常用用法:
a.查看堆的情況:jmap -heap 1234
b.dump:jmap -dump:live,format=b,file=/home/admin/logs/heap.bin 1234
或者:jmap -dump:format=b,file=/home/admin/logs/heap.bin 1234
c.查看堆被誰(shuí)占用了:jmap -histo 1234 | head -10
再結(jié)合btrace的分析
?
jmap用來(lái)查看堆內(nèi)存使用狀況,一般結(jié)合jhat使用。
jmap語(yǔ)法格式如下:
jmap [option] pid
jmap [option] executable core
jmap [option] [server-id@]remote-hostname-or-ip
使用jmap -heap pid查看進(jìn)程堆內(nèi)存使用情況,包括使用的GC算法、堆配置參數(shù)和各代中堆內(nèi)存使用情況。
使用jmap -histo[:live] pid查看堆內(nèi)存中的對(duì)象數(shù)目、大小統(tǒng)計(jì)直方圖,如果帶上live則只統(tǒng)計(jì)活對(duì)象
其中class name是對(duì)象類(lèi)型,說(shuō)明如下:
B byte
C char
D double
F float
I int
J long
Z boolean
[ 數(shù)組,如[I表示int[]
[L+類(lèi)名 其他對(duì)象)
還有一個(gè)很常用的情況是:用jmap把進(jìn)程內(nèi)存使用情況dump到文件中,再用jhat分析查看。jmap進(jìn)行dump命令格式如下:
jmap -dump:format=b,file=dumpFileName pid。注意如果Dump文件太大,可能需要加上-J-Xmx512m這種參數(shù)指定最大堆內(nèi)存,即jhat -J-Xmx512m -port 9998 /tmp/dump.dat。然后就可以在瀏覽器中輸入主機(jī)地址:9998查看了
?
5.jstat
jstat參數(shù)很多,最常用的是 jstat -gcutil 1234 1000
先看JVM堆內(nèi)存布局:
堆內(nèi)存 = 年輕代 + 年老代 + 永久代
年輕代 = Eden區(qū) + 兩個(gè)Survivor區(qū)(From和To)
現(xiàn)在來(lái)解釋各列含義:
S0C、S1C、S0U、S1U:Survivor 0/1區(qū)容量(Capacity)和使用量(Used)
EC、EU:Eden區(qū)容量和使用量
OC、OU:年老代容量和使用量
PC、PU:永久代容量和使用量
YGC、YGT:年輕代GC次數(shù)和GC耗時(shí)
FGC、FGCT:Full GC次數(shù)和Full GC耗時(shí)
GCT:GC總耗時(shí)
轉(zhuǎn)載于:https://www.cnblogs.com/john8169/p/9780542.html
與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的JVM性能调优监控工具总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: sql server 定时备份数据库
- 下一篇: GT各项参数