聊聊JVM優(yōu)化的常用指令
一、jps
jps 是(java process Status Tool), Java版的ps命令,查看java進(jìn)程及其相關(guān)的信息,如果你想找到一個(gè)java進(jìn)程的 pid,那可以用jps命令替代linux中的ps命令了,簡(jiǎn)單而方便。
jps [options] [hostid]
options參數(shù)解釋:
- -l : 顯示進(jìn)程id,顯示主類全名或jar路徑
- -q : 顯示進(jìn)程id
- -m : 顯示進(jìn)程id, 顯示JVM啟動(dòng)時(shí)傳遞給main()的參數(shù)
- -v : 顯示進(jìn)程id,顯示JVM啟動(dòng)時(shí)顯示指定的JVM參數(shù)
hostid :
主機(jī)或其他服務(wù)器ip
最常用示例:
- jps -l 輸出jar包路徑,類全名
- jps -m 輸出main參數(shù)
- jps -v 輸出JVM參數(shù)
二、jinfo
jinfo是用來(lái)查看JVM參數(shù)和動(dòng)態(tài)修改部分JVM參數(shù)的命令。
命令格式:
jinfo [option] <pid>
options參數(shù)解釋:
no options 輸出所有的系統(tǒng)屬性和參數(shù)
- -flag 打印指定名稱的參數(shù)
- -flag [+|-] 打開(kāi)或關(guān)閉參數(shù)
- flag = 設(shè)置參數(shù)
- -flags 打印所有參數(shù)
- -sysprops 打印系統(tǒng)配置
三、jstat
jstat命令是使用頻率比較高的命令,主要用來(lái)查看JVM運(yùn)行時(shí)的狀態(tài)信息,包括內(nèi)存狀態(tài)、垃圾回收等。
命令格式:
jstat [option] VMID [interval] [count ]
其中VMID是進(jìn)程id,interval是打印間隔時(shí)間(毫秒),count是打印次數(shù)(默認(rèn)一直打?。?/p>
option參數(shù)解釋:
- -class class loader的行為統(tǒng)計(jì)
- -compiler HotSpt JIT編譯器行為統(tǒng)計(jì)
- -gc 垃圾回收堆的行為統(tǒng)計(jì)
- -gccapacity 各個(gè)垃圾回收代容量(young,old,perm)和他們相應(yīng)的空間統(tǒng)計(jì)
- -gcutil 垃圾回收統(tǒng)計(jì)概述
- -gccause 垃圾收集統(tǒng)計(jì)概述(同-gcutil),附加最近兩次垃圾回收事件的原因
- -gcnew 新生代行為統(tǒng)計(jì)
- -gcnewcapacity 新生代與其相應(yīng)的內(nèi)存空間的統(tǒng)計(jì)
- -gcold 年老代和永生代行為統(tǒng)計(jì)
- -gcoldcapacity 年老代行為統(tǒng)計(jì)
- -printcompilation HotSpot編譯方法統(tǒng)計(jì)
四、 jstack
jstack是用來(lái)查看JVM線程快照的命令,線程快照是當(dāng)前JVM線程正在執(zhí)行的方法堆棧集合。使用jstack命令可以定 位線程出現(xiàn)長(zhǎng)時(shí)間卡頓的原因,例如死鎖,死循環(huán)等。jstack還可以查看程序崩潰時(shí)生成的core文件中的stack信 息。
命令格式:
jstack [options] option
參數(shù)解釋:
- -F 當(dāng)使用jstack 無(wú)響應(yīng)時(shí),強(qiáng)制輸出線程堆棧。
- -m 同時(shí)輸出java堆棧和c/c++堆棧信息(混合模式)
- -l 除了輸出堆棧信息外,還顯示關(guān)于鎖的附加信息
cpu占用過(guò)高問(wèn)題:
1.使用Process Explorer工具找到cpu占用率較高的線程
2.在thread卡中找到cpu占用高的線程id
3.線程id轉(zhuǎn)換成16進(jìn)制
4.使用jstack -l 查看進(jìn)程的線程快照
5.線程快照中找到指定線程,并分析代碼
五、jmap
jmap可以生成 java 程序的 dump 文件, 也可以查看堆內(nèi)對(duì)象示例的統(tǒng)計(jì)信息、查看 ClassLoader 的信息以及 finalizer 隊(duì)列。
命令格式:
jmap [option] (連接正在執(zhí)行的進(jìn)程)
option參數(shù)解釋:
如果使用不帶選項(xiàng)參數(shù)的jmap打印共享對(duì)象映射,將會(huì)打印目標(biāo)虛擬機(jī)中加載的每個(gè)共享對(duì)象的起始 地址、 映射大小以及共享對(duì)象文件的路徑全稱。
- -heap 打印java heap摘要
- -histo[:live] 打印堆中的java對(duì)象統(tǒng)計(jì)信息
- -clstats 打印類加載器統(tǒng)計(jì)信息
- -finalizerinfo 打印在f-queue中等待執(zhí)行finalizer方法的對(duì)象
- -dump: 生成java堆的dump文件 dump-options: live 只轉(zhuǎn)儲(chǔ)存活的對(duì)象,如果沒(méi)有指定則轉(zhuǎn)儲(chǔ)所有對(duì)象 format=b 二進(jìn)制格式 file= 轉(zhuǎn)儲(chǔ)文件到
六、jhat
hat是用來(lái)分析jmap生成dump文件的命令,jhat內(nèi)置了應(yīng)用服務(wù)器,可以通過(guò)網(wǎng)頁(yè)查看dump文件分析結(jié)果,jhat一 般是用在離線分析上。
命令格式
jhat [option][dumpfile]
option參數(shù)解釋:
- -stack false: 關(guān)閉對(duì)象分配調(diào)用堆棧的跟蹤
- -refs false: 關(guān)閉對(duì)象引用的跟蹤
- -port : HTTP服務(wù)器端口,默認(rèn)是7000
- -debug : debug級(jí)別
- -version 分析報(bào)告版本