1. 程式人生 > >JMAP、jstat命令輸出結果說明

JMAP、jstat命令輸出結果說明

顯示java程序記憶體使用的相關資訊
  • jmap pid #列印記憶體使用的摘要資訊
  • jmap –heap pid #java heap資訊
  • jmap -histo:live pid #統計物件count ,live表示在使用
  • jmap -histo pid >mem.txt #列印比較簡單的各個有多少個物件佔了多少記憶體的資訊,一般重定向的檔案
  • jmap -dump:format=b,file=mem.dat pid #將記憶體使用的詳細情況輸出到mem.dat 檔案

用jhat命令可以參看 jhat -port 7000 mem.dat
然後使用:http://127.0.0.1:7000/ 檢視類相關資訊

各個className
BaseType Character Type Interpretation
B byte signed byte
C char Unicode character
D double double-precision floating-point value
F float single-precision floating-point value
I int integer
J long long integer
L<classname>; reference an instance of class <classname>
S short signed short
Z boolean true or false
[ reference

one array dimension

記憶體洩漏一般都是有一定特徵的,任何程式碼和資料都要佔用記憶體,我簡單總結記憶體洩漏的特徵是記憶體佔用不可控制,GC不可回收。我追蹤記憶體使用量的曲線發現一些特徵,在估計虛擬機器即將崩潰時,使用
jmap
-histo pid >mem.txt 發現相關記憶體洩漏的物件佔用非常大比例的記憶體空間,然後很容易猜測問題大概的位置,一下子就解決了。

 Jstat是Sun JDK中自帶的監控工具,利用了JVM內建的指令對Java應用程式的資源和效能進行實時的命令列的監控,包括了對Heap size和垃圾回收狀況的監控等等。JStat是命令列方式執行,對系統資源佔用很小,在大壓力下很少影響效能。並且執行要求低,只要通過Telnet或SSH等方式遠端登入到伺服器所在機器,就可以進行監控。在與Jmap、JStack等工具結合使用時非常方便。

使用jstat命令監測如下記憶體使用和垃圾回收統計資料:
$ <JDK>/bin/jstat –gcutil [-h<lines>] <pid> <interval>
jstat - gcutil選項列印所執行應用程式程序ID <pid>在指定抽樣間隔<interval>下,堆使用及垃圾回收時間摘要,並且每<lines>行顯示一次頭資訊。這產生出以下樣例輸出:
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.00 24.48 46.60 90.24 142 0.530 104 28.739 29.269
0.00 0.00 2.38 51.08 90.24 144 0.536 106 29.280 29.816
0.00 0.00 36.52 51.08 90.24 144 0.536 106 29.280 29.816
0.00 26.62 36.12 51.12 90.24 145 0.538 107 29.552 30.090

一些術語的中文解釋:

S0C:年輕代中第一個survivor(倖存區)的容量 (位元組)
S1C:年輕代中第二個survivor(倖存區)的容量 (位元組)
S0U:年輕代中第一個survivor(倖存區)目前已使用空間 (位元組)
S1U:年輕代中第二個survivor(倖存區)目前已使用空間 (位元組)
EC:年輕代中Eden(伊甸園)的容量 (位元組)
EU:年輕代中Eden(伊甸園)目前已使用空間 (位元組)
OC:Old代的容量 (位元組)
OU:Old代目前已使用空間 (位元組)
PC:Perm(持久代)的容量 (位元組)
PU:Perm(持久代)目前已使用空間 (位元組)
YGC:從應用程式啟動到取樣時年輕代中gc次數
YGCT:從應用程式啟動到取樣時年輕代中gc所用時間(s)
FGC:從應用程式啟動到取樣時old代(全gc)gc次數
FGCT:從應用程式啟動到取樣時old代(全gc)gc所用時間(s)
GCT:從應用程式啟動到取樣時gc用的總時間(s)

NGCMN:年輕代(young)中初始化(最小)的大小 (位元組)

NGCMX:年輕代(young)的最大容量 (位元組)

NGC:年輕代(young)中當前的容量 (位元組)

OGCMN:old代中初始化(最小)的大小 (位元組)

OGCMX:old代的最大容量 (位元組)

OGC:old代當前新生成的容量 (位元組)

PGCMN:perm代中初始化(最小)的大小 (位元組)

PGCMX:perm代的最大容量 (位元組)

PGC:perm代當前新生成的容量 (位元組)

S0:年輕代中第一個survivor(倖存區)已使用的佔當前容量百分比

S1:年輕代中第二個survivor(倖存區)已使用的佔當前容量百分比

E:年輕代中Eden(伊甸園)已使用的佔當前容量百分比

O:old代已使用的佔當前容量百分比

P:perm代已使用的佔當前容量百分比

S0CMX:年輕代中第一個survivor(倖存區)的最大容量 (位元組)

S1CMX :年輕代中第二個survivor(倖存區)的最大容量 (位元組)

ECMX:年輕代中Eden(伊甸園)的最大容量 (位元組)

DSS:當前需要survivor(倖存區)的容量 (位元組)(Eden區已滿)

TT: 持有次數限制

MTT : 最大持有次數限制

如果FGC 過多,有必要調整下jvm引數

[[email protected] bin]# jstat -gcutil 3821 5000  10
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT  
  0.00   0.00 100.00  95.11  59.02    370   48.495   121  337.359  385.855
  0.00   0.00  84.36  99.99  59.03    370   48.495   122  345.393  393.888
  0.00  50.37 100.00  99.49  59.03    370   48.495   123  348.494  396.989
  0.00 100.00 100.00  56.58  59.03    371   48.496   124  348.494  396.989
  0.00   0.00  56.50  96.57  59.02    371   48.496   125  355.148  403.643
  0.00   0.00 100.00  96.57  59.02    372   48.496   126  355.148  403.643
  0.00   0.00  37.17  90.75  59.02    372   48.496   127  361.721  410.217
  0.00   0.00 100.00  90.75  59.02    373   48.496   128  361.721  410.217

5000 是5秒 ,10是10次

參考範例
JAVA_OPTS="-server -Xms4g -Xmx4g -XX:PermSize=96m -XX:MaxPermSize=256m -Xmn2560m -XX:SurvivorRatio=10 -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX
:CMSMaxAbortablePrecleanTime=5000 -XX:+CMSClassUnloadingEnabled -XX:CMSInitiatingOccupancyFraction=80

相關推薦

JMAPjstat命令輸出結果說明

顯示java程序記憶體使用的相關資訊 jmap pid #列印記憶體使用的摘要資訊 jmap –heap pid #java heap資訊 jmap -histo:live pid #統計物件count ,live表示在使用 jmap -histo pid >mem.txt #列印比較簡單的各個有多少

JMAPjstat命令詳解

 Jstat是Sun JDK中自帶的監控工具,利用了JVM內建的指令對Java應用程式的資源和效能進行實時的命令列的監控,包括了對Heap size和垃圾回收狀況的監控等等。JStat是命令列方式執行,對系統資源佔用很小,在大壓力下很少影響效能。並且執行要求低,只要通過Telnet或SSH等方式遠端登入到伺

JVM除錯常用命令——jmapjstat(2)

========== (接上文《JVM除錯常用命令——jps、jinfo(1)》) 1.3、jmap命令(及配套的jhat) jmap命令最大的作用是生成當前指定的Java程序的dump檔案,這個dump檔案有利於在正式生成環境下觀察JVM執行的詳細情況,這樣才能著手找出可能的問

JVM系列 實用命令jmapjstatjstack)

時間 log usr 也不能 current 垃圾 gcc 耗時 技術分享 概論命令監控最方便,但是最優的方式是通過工具打開監控:比如jconsole、jvisualvm,幾乎全部的信息都有了,另外jvisualvm支持遠程監控,但是需要做一些配置使用命令的目的 獲取垃圾回

jmapjstatjconsoleMemoryAnalyzer等工具檢視java記憶體情況

jmap (linux下特有,也是很常用的一個命令)   觀察執行中的jvm實體記憶體的佔用情況。   引數如下:   -heap :列印jvm heap的情況   -histo: 列印jvm heap的直方圖。其輸出資訊包括類名,物件數量,物件佔用大小。   

windows命令列下管道統計命令輸出結果行數

linux下有wc做命令管道輸出結果行數,windows下沒有wc命令,但可以通過find命令做統計。 find命令需匹配字串後統計,find命令引數如下: C:\Users\l00207432>find /? 在檔案中搜索字串。 FIND [/V] [/C

JVM性能監控與故障處理命令匯總(jpsjstatjinfojmapjhatjstack)

集合 列表 耗時 合計 內存 jps命令 pos 卸載 調整   給一個系統定位問題的時候,知識、經驗是關鍵基礎,數據是依據,工具才是運用知識處理數據的手段 使用適當的虛擬機監控和分析的工具可以加快我們分析數據、定位解決問題的速度,本文主要介紹了幾款服 務器上常用的命令行工

JDK命令列(jpsjstatjinfojmapjhatjstack)與JConsole

javafirst 2018-12-14 11:30:00 作者:像風一樣i 來源:https://www.cnblogs.com/yueshutong/p/9812464.html 很多資料在介紹JDK命令列工具時並不是在Java8環境下,因此還在使用過時的永久區系列的引數,給

(轉)JVM調優常用命令(jstatjmapjstack)

  原文:https://www.cnblogs.com/ityouknow/p/5714703.html 一、jstat   jstat(JVM statistics Monitoring)是用於監視虛擬機器執行時狀態資訊的命令,它可以顯示出虛擬機器程序中的類裝載、記憶體、垃圾收集、JIT編

ab網站壓力測試命令的引數輸出結果的中文註解

ab命令原理 Apache的ab命令模擬多執行緒併發請求,測試伺服器負載壓力,也可以測試nginx、lighthttp、IIS等其它Web伺服器的壓力。  ab命令對發出負載的計算機要求很低,既不會佔用很多CPU,也不會佔用太多的記憶體,但卻會給目標伺服器造成巨大的負載

Linux命令輸出頭(標題)輸出結果排序技巧

1、 Linux命令輸出頭(標題) 在使用Linux命令時,如果命令中有管道“|”,則輸出的資訊中,頭(標題)資訊丟失,要想看每一列代表什麼意思很不方便。 這裡有一個簡單的辦法,通過2條命令疊加,獲取頭和內容。例如ps auxw: $ ps axuw USER      

JVM性能調優監控工具jpsjstackjmapjhatjstat使用詳解

wait light idle cit cal reflect array sin replace JDK本身提供了很多方便的JVM性能調優監控工具,除了集成式的VisualVM和jConsole外,還有jps、jstack、jmap、jhat、jstat等小巧的工具,本博

開啟3個線程,這3個線程的ID分別為ABC,每個線程將自己的ID在屏幕上,要求輸出結果必須按ABC的順序顯示:ABCABC

abc multi adf ++ include vol form 主線程 tdi 1 #include <stdio.h> 2 #include <process.h> 3 #include <windows.h> 4 5

java執行cmd命令並獲取輸出結果

cat result ring stream jarsigner blog gin org common 1.java執行cmd命令並獲取輸出結果 1 import java.io.BufferedReader; 2 import java.io.InputStrea

用java實現從命令行接收多個數字,求和之後輸出結果

system 程序流程圖 sta num 思想 pri for循環 含義 自動 1.設計思想 首先要了解從命令行輸入數字的含義,不需要在程序中自己定義。需要定義int類的num和sum。之後利用num=Integer.parseInt(arg);將String型轉化為int

課程作業01 模仿JavaAppArguments.java示例,編寫一個程序,此程序從命令行接收多個數字,求和之後輸出結果

技術 next highlight nbsp [] ++ pub 完成 一個 設計思想:主要是在命令行進行參數的轉化並相加輸出。由於命令行參數都是字符串,想要進行相加運算必須進行轉化,借助示例JavaAppArguments.java可以很好的進行轉化,之後再進行相加運算就

命令行接收多個數字,求和輸出結果

logs print 變量 sta mil alt mage gin splay 1.設計思想 ① 定義表示和的變量sum。 ② 寫入數據,且數據為字符串類型。 ③ 在屏幕顯示寫入的數據,看看是否正確。 ④ 將數據由字符串類型轉換為所用的類型(關鍵),本程序中為do

課程作業01:模仿JavaAppArguments.java示例,編寫一個程序,此程序從命令行接收多個數字,求和之後輸出結果

解決問題 數據 代碼 spa clas blog 數字 循環求和 截圖 一、程序設計思想 解決問題的關鍵在於將參數進行數據類型的轉化,利用運行配置輸入的數據類型是String類型,故需要用Integer.parse()或者Integer.valueOf()將原有的Strin

Java程序:從命令行接收多個數字,求和並輸出結果

程序代碼 ati for right 流程圖 public 技術 參數 由於 程序設計思想:由於命令行接收的是字符串類型,因此應先將字符串類型轉化為整型或其他字符型,然後利用for循環求和並輸出結果 程序流程圖: 源程序代碼: 1 public class Ja

模仿JavaAppArguments.java示例,編寫一個程序,此程序從命令行接收多個數字,求和之後輸出結果

程序流程圖 註意 isp 流程 字符數 個數字 [] println nts [課程作業01] 設計思想 用args[]字符數組,用戶在參數表中依次輸入要相加的參數,程序統計用戶輸入的參數個數,依次輸出參數,sum賦初值為0,參數依次相加賦值給sum,最後輸出sum值。