jps位於jdk的bin目錄下,其做用是顯示當前系統的java進程狀況,及其id號。 jps至關於Solaris進程工具ps。不象」pgrep java」或」ps -ef grep java」,jps並不使用應用程序名來查找JVM實例。所以,它查找全部的Java應用程序,包括即便沒有使用java執行體的那種(例如,定製的啓動 器)。html
jps僅查找當前用戶的Java進程,而不是當前系統中的全部進程。java
Jstack是java虛擬機自帶的一種堆棧跟蹤工具。瀏覽器
jstack用於生成java虛擬機當前時刻的線程快照。線程快照是當前java虛擬機內每一條線程正在執行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現長時間停頓的緣由,如線程間死鎖、死循環、請求外部資源致使的長時間等待等。app
經過對線程狀態的查看,結合源碼,通常都能找出hung住線程的緣由。jvm
線程狀態工具
jstack的用法:學習
jstack [進程號]
可獲得以下相似結果:spa
"main" #1 prio=5 os_prio=31 tid=0x00007fc918809800 nid=0x1c03 waiting on condition [0x0000700007a01000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at com.aheizi.cmd.JpsTest.main(JpsTest.java:11) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
再根據線程狀態和具體代碼進行分析。命令行
查看堆使用狀況:線程
jmap -heap 2357
查看堆內存(histogram)中的對象數量及大小:
jmap -histo 2357
將內存使用的詳細狀況輸出到文件:
jmap -dump:format=b,file=heapDump 2357
輸出到文件以後能夠經過jhat -port 7000 heapDump在瀏覽器訪問http://localhost:7000/
查看詳細信息
jmap -heap
命令查看堆的使用狀況,看一下各個堆空間的佔用狀況。jmap -histo:[live]
查看堆內存中的對象的狀況。若是有大量對象在持續被引用,並無被釋放掉,那就產生了內存泄露,就要結合代碼,把不用的對象釋放掉。jmap -dump:format=b,file=<fileName>
命令將堆信息保存到一個文件中,再借助jhat命令查看詳細內容jstat [ generalOption | outputOptions vmid [interval[s|ms][count]] ]
參數:
generalOption: 通常使用-gcutil查看GC狀況
vmid: 虛擬機進程號,即當前運行的java進程號
interval: 間隔時間,單位爲秒或毫秒
count: 打印次數,若是缺省則打印無數次
參數interval和count表明查詢間隔和次數,若是省略這兩個參數,說明只查詢一次。假設須要每250毫秒查詢一次進程2357垃圾收集情況,一共查詢5次,那命令行以下:
jstat -gc 2357 250 5
參數說明以下:
S0: 新生代中Survivor space 0區已使用空間的百分比
S1: 新生代中Survivor space 1區已使用空間的百分比
E: 新生代已使用空間的百分比
O: 老年代已使用空間的百分比
P: 永久帶已使用空間的百分比
YGC: 從應用程序啓動到當前,發生Yang GC 的次數
YGCT: 從應用程序啓動到當前,Yang GC所用的時間【單位秒】
FGC: 從應用程序啓動到當前,發生Full GC的次數
FGCT: 從應用程序啓動到當前,Full GC所用的時間
GCT: 從應用程序啓動到當前,用於垃圾回收的總時間【單位秒】
jhat前面已經用過了。使用jmap能夠生成Java堆的Dump文件。生成dump文件以後就能夠用jhat命令,將dump文件轉成html的形式,而後經過http訪問能夠查看堆狀況。
獲取Java Dump的方法
jstack
:打印線程的棧信息,製做線程Dump。jmap
:打印內存映射,製做堆Dump。步驟:
參考資料: