面试官:你用过哪些JDK自带的命令行工具
本文基于HotSpot虛擬機(jī),JDK版本1.8.0_171,windows系統(tǒng)
目錄
一、jps:虛擬機(jī)進(jìn)程狀況工具 二、jstat:虛擬機(jī)統(tǒng)計(jì)信息監(jiān)視工具 三、jmap:Java內(nèi)存映像工具 四、jhat:虛擬機(jī)堆轉(zhuǎn)儲(chǔ)快照分析工具 五、jstack:Java堆棧跟蹤工具 六、jinfo:Java配置信息工具
java和javac這兩個(gè)命令行工具我們應(yīng)該都很熟悉,但是除了這兩個(gè)工具jdk/bin里面還提供了很多工具給我們使用,今天就簡(jiǎn)單介紹有關(guān)虛擬機(jī)監(jiān)控且助于故障排查的工具。
實(shí)際上這些工具大多數(shù)就是jdk/lib/tool.jar的封裝,內(nèi)部就是調(diào)用tool里面的內(nèi)容,所以工具體積都不大,而且在linux版本的jdk中有些工具就是用shell寫的。1.jps(JVM Process Status Tool)
用于顯示指定系統(tǒng)內(nèi)所有HotSpot虛擬機(jī)進(jìn)程,并且能顯示虛擬機(jī)執(zhí)行主類以及本地虛擬機(jī)唯一ID(LVMID,Local Virtual Machine Identifier)功能單一,但是其他因?yàn)槠渌ぞ叨夹枰该鱈VMID(來確定要監(jiān)控的虛擬機(jī)進(jìn)程,所以都需要用到它。對(duì)于本地的虛擬機(jī)進(jìn)程來說LVMID和操作系統(tǒng)的進(jìn)程ID一致。
使用格式:jps [options] [hostid]
樣例:jps可以通過RMI協(xié)議查詢遠(yuǎn)程開啟RMI服務(wù)的虛擬機(jī)進(jìn)程,hostid為RMI注冊(cè)表中注冊(cè)的主機(jī)名。
2.jstat(JVM Statistics Monitoring Tool)
用于監(jiān)視虛擬機(jī)各種運(yùn)行狀態(tài)信息的工具,可以顯示本地或者遠(yuǎn)程的虛擬機(jī)進(jìn)程類裝載、內(nèi)存、GC、JIT等運(yùn)行數(shù)據(jù),在沒有GUI圖像界面的服務(wù)器上,主要就是用它在運(yùn)行期定位性能問題。
使用格式 :jstat [option vmid [interval [s|ms] [count]] ]
interval表示查詢的間隔, s|ms是秒和毫秒(默認(rèn)是毫秒,即不寫單位是毫秒),count表示查詢的次數(shù)。
樣例:表示每5秒鐘查看一次LVMID為34216的虛擬機(jī)進(jìn)程的GC情況,一共查詢10次
3.jmap (Memory Map for Java)
用于生成堆轉(zhuǎn)儲(chǔ)快照(heapdump或dump文件),說白了就是把java堆使用情況快照一份導(dǎo)出來供我們查看,用來排查問題。
使用格式 :jmap [option] vmid
樣例4.jhat (JVM Heap Analysis Tool)
這個(gè)就是和jmap搭配使用的,jmap導(dǎo)出來的堆快照文件用jhat 打開分析
使用格式: jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>] [-version] [-h|-help] <file>
樣例:
查看分析結(jié)果5.jstack (Stack Trace for Java)
用于生成虛擬機(jī)當(dāng)前時(shí)刻線程快照(threaddump或javacore)。主要用來定位線程出現(xiàn)長(zhǎng)時(shí)間停頓的原因,判斷死鎖啊,死循環(huán)的等。通過jstack就可知各線程的調(diào)用堆棧情況。
使用格式:jstack [option] vmid
樣例:
6.jinfo (Configuration Info for Java)
用來查看和調(diào)整虛擬機(jī)各項(xiàng)參數(shù)
使用格式:jinfo [option] pid
可以通過-flag[+|-] name 添加和刪除一些參數(shù),或者-flag name =value修改一些參數(shù),但是很多參數(shù)是不允許修改的
樣例:結(jié)語(yǔ)
本文主要是簡(jiǎn)單介紹常見的幾個(gè)JDK命令行工具,建議使用的時(shí)候自己通過命令 -option 查看每個(gè)選項(xiàng)實(shí)際的意思再使用,畢竟這么選項(xiàng)一般也記不住。而且這些工具有一些算比較簡(jiǎn)陋了例如jhat ,這玩意分析的簡(jiǎn)陋,界面也簡(jiǎn)陋不夠強(qiáng)大和專業(yè)。所以這些個(gè)命令行工具以了解和大概明白其作用為主。
像平日里一般用于分析都用JConsole、VisualVM(All-in-One Java Troubleshooting Tool)這種可視化工具來分析故障監(jiān)控性能等,有些在IDE里面的也有用MAT等工具分析。
本文參考《深入理解JAVA虛擬機(jī)》第四章
如有錯(cuò)誤歡迎指正!
個(gè)人公眾號(hào):yes的練級(jí)攻略
有相關(guān)面試進(jìn)階(分布式、性能調(diào)優(yōu)、經(jīng)典書籍pdf)資料等待領(lǐng)取
總結(jié)
以上是生活随笔為你收集整理的面试官:你用过哪些JDK自带的命令行工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 内核101:[译]并发导论
- 下一篇: 大话算法-排序-归并排序