理解JVM(三):JVM命令工具

jps(JVM Process Status Tool)

虛擬機進程狀況工具勺像,可以列出正在運行的虛擬機進程错森,并顯示虛擬機執(zhí)行主類(MainClass,main()函數(shù)所在的類)名稱以及這些進程的本地虛擬機唯一ID(Local Virtual Machine Identifier,LVMID)。

  • 命令格式:jps[options][hostid]
  • 參數(shù):
    • -q:只輸出LVMID涩维,省略主類名稱
    • -m:輸出虛擬機進程啟動時傳給主類main()函數(shù)的參數(shù)
    • -l:輸出主類全名,如果進程執(zhí)行的時jar包則輸出jar路徑
    • -v:輸出虛擬機進程啟動時的jvm參數(shù)

jstat(JVM Statistics Monitoring Tool)

虛擬機統(tǒng)計信息監(jiān)視工具辰狡,用于監(jiān)視虛擬機各種運行狀態(tài)信息的命令行工具垄分。它可以顯示本地或者遠程虛擬機進程中的類裝載、內(nèi)存薄湿、垃圾收集、JIT編譯等運行數(shù)據(jù)吆倦,在沒有GUI圖形界面坐求,只提供了純文本控制臺環(huán)境的服務(wù)器上蚕泽,它將是運行期定位虛擬機性能問題的首選工具。

  • 命令格式:jstat[option vmid[interval[s|ms][count]]]
  • 對于命令格式中的VMID與LVMID需要特別說明一下:如果是本地虛擬機進程仔蝌,VMID與LVMID是一致的荒吏;如果是遠程虛擬機進程,那VMID的格式應(yīng)當(dāng)是:[protocol:][//]lvmid[@hostname[:port]/servername]
  • 參數(shù)interval和count代表查詢間隔和次數(shù)瞧挤,如果省略這兩個參數(shù)儡湾,說明只查詢一次。
// 每250毫秒查詢一次進程2764垃圾收集狀況盒粮,一共查詢20次
jstat-gc 2764 250 20
  • 參數(shù):主要分為3類:類裝載奠滑、垃圾收集、運行
    期編譯狀況
    • -class:監(jiān)視類裝載摊崭、卸載數(shù)量杰赛、總空間和類裝載消耗的時間
    • -gc:監(jiān)視java堆狀況,包括Eden區(qū)乏屯、2個Survivor區(qū)、老年代蛤迎、永久代等的容量含友,已用空間,GC時間合計等信息
    • -gccapacity: 監(jiān)視內(nèi)容與-gc相同窘问,但輸出主要關(guān)注Java堆各個區(qū)域使用到的最大、最小空間
    • -gcutil:監(jiān)視內(nèi)容與-gc相同把鉴,但輸出主要關(guān)注已使用空間占總空間的百分百
    • -gccause:與-gcutil一樣儿咱,但會額外輸出上一次GC產(chǎn)生的原因
    • -gcnew:監(jiān)視新生代GC的狀況
    • -gcnewcapacity:監(jiān)視內(nèi)容與-gcnew相同倍阐,輸出主要關(guān)注使用到的最大逗威、最小空間
    • -gcold:監(jiān)視老年代GC的狀況
    • -gcoldcapacity:監(jiān)視內(nèi)容與-gcold相同,輸出主要關(guān)注使用到的最大凯旭、最小空間
    • -gcpermcapacity:輸出永久代使用到的最大、最小空間
    • -compiler:輸出JIT編譯過的方法鞠柄、耗時等信息
    • -printcompilation:輸出已被JIT編譯的方法

jinfo(Configuration Info for Java)

Java配置信息工具嫉柴,可實時查看和調(diào)整虛擬機各項參數(shù)。

  • 命令格式:jinfo[option]pid
  • 參數(shù):
    • -flag:輸出指定args參數(shù)的值
    • -flags:不需要args參數(shù)计螺,輸出所有JVM參數(shù)的值
    • -sysprops:輸出系統(tǒng)屬性,等同于System.getProperties()

jmap(Memory Map for Java)

Java內(nèi)存映像工具用于生成堆轉(zhuǎn)儲快照(dump文件)

  • 幾種獲得dump文件的方式
    • jmap命令
    • -XX:+HeapDumpOnOutOfMemoryError參數(shù)匙握,可以讓虛擬機在OOM異常出現(xiàn)之后自動生成dump文件
    • -XX:+HeapDumpOnCtrlBreak參數(shù)則可以使用[Ctrl]+[Break]鍵讓虛擬機生成dump文件
    • 在Linux系統(tǒng)下通過Kill-3命令發(fā)送進程退出信號也能拿到dump文件
  • 命令格式:jmap[option]vmid
  • 參數(shù):
    • -dump:生成堆轉(zhuǎn)儲快照
    • -finalizerinfo:顯示在F-Queue隊列等待Finalizer線程執(zhí)行finalizer方法的對象
    • -heap:顯示Java堆詳細信息
    • -histo:顯示堆中對象的統(tǒng)計信息
    • -permstat:以CLassLoader為統(tǒng)計口徑顯示永久代內(nèi)存狀態(tài)
    • -F:當(dāng)-dump沒有響應(yīng)時陈轿,強制生成dump快照

jhat(JVM Heap Analysis Tool)

與jmap搭配使用,用來分析jmap生成的堆轉(zhuǎn)儲快照蛾娶。jhat內(nèi)置了一個微型的HTTP/HTML服務(wù)器潜秋,生成dump文件的分析結(jié)果后,可以在瀏覽器中查看半等。

  • 命令格式:jhat [dumpfile]
  • 不推薦使用此命令,有2個原因:
    • 一般不會直接在服務(wù)器上分析dump文件莽囤,浪費服務(wù)器資源切距。
    • 分析功能簡陋,推薦用專業(yè)的可視化分析工具,比如VisualVM

jstack(Stack Trace for Java)

Java堆棧跟蹤工具北秽,用于生成虛擬機當(dāng)前時刻的線程快照最筒。

線程快照就是當(dāng)前虛擬機內(nèi)每一條線程正在執(zhí)行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現(xiàn)長時間停頓的原因床蜘,如線程間死鎖、死循環(huán)扬蕊、請求外部資源導(dǎo)致的長時間等待等都是導(dǎo)致線程長時間停頓的常見原因丹擎。

線程出現(xiàn)停頓的時候通過jstack來查看各個線程的調(diào)用堆棧,就可以知道沒有響應(yīng)的線程到底在后臺做些什么事情蒂培,或者等待著什么資源。

  • 命令格式:jstack[option]vmid
  • 參數(shù):
    • -F:當(dāng)正常輸出的請求不被響應(yīng)時,強制輸出線程堆棧
    • -l:除堆棧外单刁,顯示關(guān)于鎖的附加信息
    • -m:如果調(diào)用本地方法,可顯示C/C++的堆棧
  • 在JDK 1.5中肺樟,java.lang.Thread類新增了一個getAllStackTraces()方法用于獲取虛擬機中所有線程的StackTraceElement對象逻淌。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市田柔,隨后出現(xiàn)的幾起案子骨望,更是在濱河造成了極大的恐慌,老刑警劉巖擎鸠,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異袜蚕,居然都是意外死亡,警方通過查閱死者的電腦和手機牲剃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門颠黎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人狭归,你說我怎么就攤上這事∈颐罚” “怎么了疚宇?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長敷待。 經(jīng)常有香客問我间涵,道長榜揖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任思劳,我火速辦了婚禮妨猩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘威兜。我一直安慰自己庐椒,他們只是感情好牡属,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布逮栅。 她就那樣靜靜地躺著,像睡著了一般措伐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捧存,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天担败,我揣著相機與錄音,去河邊找鬼提前。 笑死,一個胖子當(dāng)著我的面吹牛宙搬,可吹牛的內(nèi)容都是我干的拓哺。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼士鸥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了讼积?” 一聲冷哼從身側(cè)響起鸽凶,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤建峭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后凑兰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體边锁,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年音半,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片曹鸠。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡彻桃,死狀恐怖坛善,靈堂內(nèi)的尸體忽然破棺而出邻眷,到底是詐尸還是另有隱情,我是刑警寧澤改衩,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布抖拴,位于F島的核電站,受9級特大地震影響阿宅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛉鹿,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一往湿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧领追,春花似錦、人聲如沸棕孙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽订雾。三九已至,卻和暖如春洼哎,著一層夾襖步出監(jiān)牢的瞬間沼本,已是汗流浹背锭沟。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留郊丛,地道東北人瞧筛。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像揍瑟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绢片,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 參數(shù)設(shè)置 在Java虛擬機的參數(shù)中底循,有3種表示方法用“ps -ef |grep "java"命令,可以得到當(dāng)前Ja...
    九問閱讀 9,128評論 2 52
  • 注:最近一直想出一篇介紹JVM底層函數(shù)調(diào)用的博客熙涤,奈何越寫越多困檩,現(xiàn)在還沒寫完,先來個簡單的安慰下我受傷的心靈 滴滴...
    miaoLoveCode閱讀 4,181評論 10 47
  • SPIN提問模式 關(guān)鍵問題 1等舔、什么是“背景問題”糟趾?有什么用處? 背景問題:指通過提問收集到有關(guān)客戶現(xiàn)狀的事實拉讯、信...
    易秒閱讀 925評論 0 0
  • 今天鳖藕,自由書寫陪伴營的最后一天,也是我在自個工作的最后一天著恩,明天蜻展,自由了邀摆,跟自個也再無關(guān)系。注定栋盹,2月這最后一天,...
    ipirate閱讀 254評論 5 5
  • 這是一個很遙遠很遙遠的故事汉额。 把她抱在自己雙腿上榨汤,隨意玩弄著她的長發(fā)蠕搜,然后說著動人的情話,時不時還掐掐鼻子妓灌,臉蛋蜜宪。...
    酷我歌閱讀 155評論 0 0