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