Java常用命令及Java Dump
線程Dump,包含所有線程的運(yùn)行狀態(tài)。純文本格式。
堆Dump,包含線程Dump,幵包含所有堆對(duì)象的狀態(tài)。二進(jìn)制格式。
Java Dump方法
1.使用Java虛擬機(jī)制作Dump
指示虛擬機(jī)在發(fā)生內(nèi)存不足錯(cuò)誤時(shí),自動(dòng)生成堆Dump
-XX:+HeapDumpOnOutOfMemoryError
2.使用圖形化工具制作Dump
使用JDK(1.6)自帶的工具:Java VisualVM。
3.使用命令行制作Dump
jstack:打印線程的棧信息,制作線程Dump。
jmap:打印內(nèi)存映射,制作堆Dump。
步驟:
檢查虛擬機(jī)版本(java -version)
找出目標(biāo)Java應(yīng)用的進(jìn)程ID(jps)
使用jstack命令制作線程Dump? Linux環(huán)境下使用kill命令制作線程Dump
使用jmap命令制作堆Dump
都位于jdk的bin目錄下
1.jps顯示當(dāng)前系統(tǒng)的java進(jìn)程情況,及其id號(hào)
?jps相當(dāng)于Solaris進(jìn)程工具ps。不象”pgrep java”或”ps -ef grep java”,jps并不使用應(yīng)用程序名來(lái)查找JVM實(shí)例。因此,它查找所有的Java應(yīng)用程序,包括即使沒(méi)有使用java執(zhí)行體的那種(例如,定制的啟動(dòng) 器)。另外,jps僅查找當(dāng)前用戶的Java進(jìn)程,而不是當(dāng)前系統(tǒng)中的所有進(jìn)程。
2.jstack用于生成java虛擬機(jī)當(dāng)前時(shí)刻的線程快照。
線程快照是當(dāng)前java虛擬機(jī)內(nèi)每一條線程正在執(zhí)行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現(xiàn)長(zhǎng)時(shí)間停頓的原因,如線程間死鎖、死循環(huán)、請(qǐng)求外部資源導(dǎo)致的長(zhǎng)時(shí)間等待等。 線程出現(xiàn)停頓的時(shí)候通過(guò)jstack來(lái)查看各個(gè)線程的調(diào)用堆棧,就可以知道沒(méi)有響應(yīng)的線程到底在后臺(tái)做什么事情,或者等待什么資源。 如果java程序崩潰生成core文件,jstack工具可以用來(lái)獲得core文件的java stack和native stack的信息,從而可以輕松地知道java程序是如何崩潰和在程序何處發(fā)生問(wèn)題。另外,jstack工具還可以附屬到正在運(yùn)行的java程序中,看到當(dāng)時(shí)運(yùn)行的java程序的java stack和native stack的信息, 如果現(xiàn)在運(yùn)行的java程序呈現(xiàn)hung的狀態(tài),jstack是非常有用的。
http://www.hollischuang.com/archives/110
3.jmap是JDK自帶的工具軟件,主要用于打印指定Java進(jìn)程(或核心文件、遠(yuǎn)程調(diào)試服務(wù)器)的共享對(duì)象內(nèi)存映射或堆內(nèi)存細(xì)節(jié)。可以使用jmap生成Heap Dump。
常見(jiàn)內(nèi)存錯(cuò)誤:
outOfMemoryError 年老代內(nèi)存不足。
outOfMemoryError:PermGen Space 永久代內(nèi)存不足。
outOfMemoryError:GC overhead limit exceed 垃圾回收時(shí)間占用系統(tǒng)運(yùn)行時(shí)間的98%或以上。
http://www.hollischuang.com/archives/303
4.jstat(JVM Statistics Monitoring Tool)是用于監(jiān)控虛擬機(jī)各種運(yùn)行狀態(tài)信息的命令行工具。他可以顯示本地或遠(yuǎn)程虛擬機(jī)進(jìn)程中的類裝載、內(nèi)存、垃圾收集、JIT編譯等運(yùn)行數(shù)據(jù),在沒(méi)有GUI圖形的服務(wù)器上,它是運(yùn)行期定位虛擬機(jī)性能問(wèn)題的首選工具。
5.jhat(Java Heap Analysis Tool),是一個(gè)用來(lái)分析java的堆情況的命令。之前的文章講到過(guò),使用jmap可以生成Java堆的Dump文件。生成dump文件之后就可以用jhat命令,將dump文件轉(zhuǎn)成html的形式,然后通過(guò)http訪問(wèn)可以查看堆情況。jhat命令解析會(huì)Java堆dump并啟動(dòng)一個(gè)web服務(wù)器,然后就可以在瀏覽器中查看堆的dump文件了。
jhat還提供了一種對(duì)象查詢語(yǔ)言(Object Query Language),OQL有點(diǎn)類似SQL,可以用來(lái)查詢。
6.javap是jdk自帶的一個(gè)工具,可以對(duì)代碼反編譯,可以查看java編譯器生成的字節(jié)碼。
http://www.hollischuang.com/archives/1107
https://www.cnblogs.com/frinder6/p/5440173.html
參考:http://www.hollischuang.com/archives/308
http://www.importnew.com/18398.html
一次服務(wù)大量超時(shí)的java排查過(guò)程經(jīng)驗(yàn)
Java應(yīng)用調(diào)試?yán)鳌狟Trace教程
總結(jié)
以上是生活随笔為你收集整理的Java常用命令及Java Dump的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 匿名内部类和传接口
- 下一篇: 用“逐步排除”的方法定位Java服务线上