講解幾個JDK自帶命令的用法(順序從使用頻率由高到低): html
此命令是用來查看tomcat的運行狀況的 java
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
參數 | 說明 |
Options |
選項,咱們通常使用 -gcutil 查看GC狀況 |
vmid |
VM的進程號,即當前運行的java進程號 |
interval |
間隔時間,單位爲秒或者毫秒 |
count |
打印次數,若是缺省則打印無數次 |
S0 — Heap上的 Survivor space 0 區已使用空間的百分比
S1 — Heap上的 Survivor space 1 區已使用空間的百分比
E — Heap上的 Eden space 區已使用空間的百分比
O — Heap上的 Old space 區已使用空間的百分比
P — Perm space 區已使用空間的百分比
YGC — 從應用程序啓動到採樣時發生 Young GC 的次數
YGCT– 從應用程序啓動到採樣時 Young GC 所用的時間(單位秒)
FGC — 從應用程序啓動到採樣時發生 Full GC 的次數
FGCT– 從應用程序啓動到採樣時 Full GC 所用的時間(單位秒)
GCT — 從應用程序啓動到採樣時用於垃圾回收的總時間(單位秒) linux
簡單瞭解JDK的GC運行原理後,會對以上參數更加理解。 shell
通常,咱們只須要看Old space的百分比,若是這個數值異常偏高那就須要好好檢查一下啦。 tomcat
使用該命令能夠在控制檯直接打印出堆棧信息 app
jstack -F [-m] [-l] <pid>
參數 | 說明 |
-F | 強制輸出堆棧信息(使用jstack <pid>命令沒有獲得響應的時候使用 ) |
-m | to print both java and native frames (mixed mode) |
-l | long listing. Prints additional information about locks |
這個命令還能夠輸出爲文件,以下: eclipse
jstack 22899 > /home/appuser/stacklogs/22899.log結合jstack和top這兩個命令能夠找到當前佔用CPU或內存最高的線程堆棧信息,具體作法下面會講。
打印或輸出指定java進程的堆信息 jvm
jmap [option] <pid>
參數 | 說明 |
-heap | 在控制檯打印出java堆的信息,包括配置的內存大小和運行狀況 |
-histo[:live] |
模擬柱狀圖的方式打印堆裏的對象信息,包括個數和佔用的內存.加上":live"則只打印存活的對象 |
-dump:<dump-options> |
將堆信息以二進制文件dump下來。 工具 dump-options包含如下三個參數: 性能 live 只打印存活的對象 format=b 二進制轉換 file=<file> dump文件的路徑 eg: jmap -dump:live,format=b,file=heap.map <pid> |
-F | 在使用參數dump或histo後進程沒有響應的狀況下強制生成堆信息 |
jmap -dump:live,file=d://7212.map 7212
我通常使用這個命令生成jmap文件,而後使用eclipse的MemoryAnalyzer工具做分析
jmap命令的CPU消耗很大,建議你們熟練後再去生產環境使用.
=====================2016年3月10日 這是分隔線唷==========================
使用jstack找出佔用CPU較高的線程
工具: jstack , top , 能夠將十進制轉換爲十六進制的計算器(這個有點中二
1. top獲得佔用最高的進程號爲12335
2. 使用top -p 12335 -H獲得佔用CPU最高的線程號爲12358
3. 將12358由十進制轉爲十六進制獲得nid: 3046(注1),經過nid在jstack生成的堆記錄中就能查找到對應的線程啦。
不過我以爲這個方式有點中二,若是你想抓取形成瞬時對CPU佔用高的線程是根本不可能的,由於你要進行這麼多步才能找到對應的nid,可能在你找到nid的時候佔用CPU高的任務已經跑完了呢。 ╮( ̄▽ ̄")╭
注1: linux下,全部的java內部線程,其實都對應了一個進程id,也就是說,linux上的sun jvm將java程序中的線程映射爲了操做系統進程;咱們看到,佔用CPU資源最高的那個進程id是’15417′,這個進程id對應java線程信息中的’nid’(‘n’ stands for ‘native’);
--摘自《Linux下Java線程詳細監控和其dump的分析使用—-分析Java性能瓶頸》 http://www.geek521.com/?p=7649
參考博文連接:
《JDK之jstat的用法》http://www.51testing.com/html/92/77492-203728.html
《JVM性能調優監控工具jps、jstack、jmap、jhat、jstat、hprof使用詳解》
http://my.oschina.net/feichexia/blog/196575?fromerr=RYyZOXW2