當前位置:首頁 » 編程語言 » javajstat

javajstat

發布時間: 2022-08-06 15:29:56

⑴ 使用jstat gc命令會影響java進程嗎

命令格式
jstat命令命令格式:
jstat [Options] vmid [interval] [count]

參數說明:
Options,選項,我們一般使用 -gcutil 查看gc情況
vmid,VM的進程號,即當前運行的java進程號
interval,間隔時間,單位為秒或者毫秒
count,列印次數,如果預設則列印無數次

示例說明
示例
通常運行命令如下:
jstat -gc 12538 5000

即會每5秒一次顯示進程號為12538的java進成的GC情況,
顯示內容如下圖:

結果說明
顯示內容說明如下(部分結果是通過其他其他參數顯示的,暫不說明):
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 : 最大持有次數限制

⑵ 如何監控Java垃圾回收機制

垃圾回收收集監控指的是搞清楚JVM如何執行GC的過程,例如,我們可以查明:

1. 何時一個新生代中的對象被移動到老年代時,所花費的時間。

2. Stop-the-world 何時發生的,持續了多長時間。

GC監控是為了鑒別JVM是否在高效地執行GC,以及是否有必要進行額外的性能調優。基於以上信息,我們可以修改應用程序或者調整GC演算法(GC優化)。

如何監控GC

有很多種方法可以監控GC,但其差別僅僅是GC操作通過何種方式展現而已。GC操作是由JVM來完成,而GC監控工具只是將JVM提供的GC信息展現給你,因此,不論你使用何種方式監控GC都將得到相同的結果。所以你也就不必去學習所有的監控GC的方法。但是因為學習每種監控方法不會佔用太多時間,了解多一點可以幫助你根據不同的場景選擇最為合適的方式。

下面所列的工具以及JVM參數並不適用於所有的HVM供應商。這是因為並沒有關於GC信息的強制標准。本文我們將使用HotSpot JVM (Oracle JVM)。因為NHN 一直在使用Oracle (Sun) JVM,所以用它作為示例來解釋我們提到的工具和JVM參數更容易些。
首先,GC監控方法根據訪問的介面不同,可以分成CUI 和GUI 兩大類。CUI GC監控方法使用一個獨立的叫做」jstat」的CUI應用,或者在啟動JVM的時候選擇JVM參數」verbosegc」。
GUI GC監控由一個單獨的圖形化應用來完成,其中三個最常用的應用是」jconsole」, 「jvisualvm」 和 「Visual GC」。
下面我們來詳細學習每種方法。

jstat

jstat 是HotSpot JVM提供的一個監控工具。其他監控工具還有jps 和jstatd。有些時候,你可能需要同時使用三種工具來監控你的應用。jstat 不僅提供GC操作的信息,還提供類裝載操作的信息以及運行時編譯器操作的信息。本文將只涉及jstat能夠提供的信息中與監控GC操作信息相關的功能。
jstat 被放置在$JDK_HOME/bin。因此只要java 和 javac能執行,jstat 同樣可以執行。
你可以在命令行環境下執行如下語句。

你可以只關心那些最常用的命令,你會經常用到 -gcutil (或-gccause), -gc and –gccapacity。

· -gcutil 被用於檢查堆間的使用情況,GC執行的次數以及GC操作所花費的時間。

· -gccapacity以及其他的參數可以用於檢查實際分配內存的大小。

⑶ 如何打開java jvm監控工具

請確保java_home/bin配置到path環境變數下,因為這些工具都在jdk的bin目錄下
圖形化工具 ctrl+R 命令行 輸入: jVisualVM 進入圖形化工具查看cpu 內存等等的消耗
jps(JVM Process Status Tool):JVM機進程狀況工具

用來查看基於HotSpot JVM裡面所有進程的具體狀態, 包括進程ID,進程啟動的路徑等等。與unix上的ps類似,用來顯示本地有許可權的java進程,可以查看本地運行著幾個java程序,並顯示他們的進程號。使用jps時,不需要傳遞進程號做為參數。
Jps也可以顯示遠程系統上的JAVA進程,這需要遠程服務上開啟了jstat服務,以及RMI注及服務,不過常用都是對本對的JAVA進程的查看。
命令格式:jps [ options ] [ hostid ]
常用參數說明:
-m 輸出傳遞給main方法的參數,如果是內嵌的JVM則輸出為null。
-l 輸出應用程序主類的完整包名,或者是應用程序JAR文件的完整路徑。
-v 輸出傳給JVM的參數。

⑷ 使用jstat命令會影響java進程嗎

使用jstat命令會影響java進程
JDK自帶VM分析工具jps,jstat,jmap,jconsole
關鍵字: jdk自帶vm分析工具jps,jstat,jmap,jconsole

一、概述

SUN 的JDK中的幾個工具,非常好用。秉承著有免費,不用商用的原則。以下簡單介紹一下這幾種工具。(註:本文章下的所有工具都存在JDK5.0以上版本的工具集里,同javac一樣,不須特意安裝) 。

我一共找到以下四個工具:重點看看jconsole和jmap。

jps
:與unix上的ps類似,用來顯示本地的java進程,可以查看本地運行著幾個java程序,並顯示他們的進程號。

jstat
:一個極強的監視VM內存工具。可以用來監視VM內存內的各種堆和非堆的大小及其內存使用量。

jmap
:列印出某個java進程(使用pid)內存內的所有『對象』的情況(如:產生那些對象,及其數量)。

jconsole
:一個java GUI監視工具,可以以圖表化的形式顯示各種數據。並可通過遠程連接監視遠程的伺服器VM。

二、 使用介紹:

1、jps :我想很多人都是用過unix系統里的ps命令,這個命令主要是用來顯示當前系統的進程情況,有哪些進程,及其 id。 jps 也是一樣,它的作用是顯示當前系統的java進程情況,及其id號。我們可以通過它來查看我們到底啟動了幾個java進程(因為每一個java程序都會獨佔一個java虛擬機實例),和他們的進程號(為下面幾個程序做准備),並可通過opt來查看這些進程的詳細啟動參數。
使用方法:在當前命令行下打 jps(需要JAVA_HOME,沒有的話,到改程序的目錄下打) 。

可惜沒有linux下的ps好用,名稱不好用。但是在第四個工具jconsole的界面裡面會有具體JAR包的名稱。

2、jstat :對VM內存使用量進行監控。
jstat工具特別強大,有眾多的可選項,詳細查看堆內各個部分的使用量,以及載入類的數量。使用時,需加上查看進程的進程id,和所選參數。以下詳細介紹各個參數的意義。
jstat -class pid:顯示載入class的數量,及所佔空間等信息。
jstat -compiler pid:顯示VM實時編譯的數量等信息。
jstat -gc pid:可以顯示gc的信息,查看gc的次數,及時間。其中最後五項,分別是young gc的次數,young gc的時間,full gc的次數,full gc的時間,gc的總時間。
jstat -gccapacity:可以顯示,VM內存中三代(young,old,perm)對象的使用和佔用大小,如:PGCMN顯示的是最小perm的內存使用量,PGCMX顯示的是perm的內存最大使用量,PGC是當前新生成的perm內存佔用量,PC是但前perm內存佔用量。其他的可以根據這個類推, OC是old內純的佔用量。
jstat -gcnew pid:new對象的信息。
jstat -gcnewcapacity pid:new對象的信息及其佔用量。
jstat -gcold pid:old對象的信息。
jstat -gcoldcapacity pid:old對象的信息及其佔用量。
jstat -gcpermcapacity pid: perm對象的信息及其佔用量。
jstat -util pid:統計gc信息統計。
jstat -printcompilation pid:當前VM執行的信息。
除了以上一個參數外,還可以同時加上 兩個數字,如:jstat -printcompilation 3024 250 6是每250毫秒列印一次,一共列印6次,還可以加上-h3每三行顯示一下標題。

3、jmap 是一個可以輸出所有內存中對象的工具,甚至可以將VM 中的heap,以二進制輸出成文本。使用方法 jmap -histo pid。如果連用 SHELL jmap -histo pid>a.log可以將其保存到文本中去(windows下也可以使用),在一段時間後,使用文本對比工具,可以對比出GC回收了哪些對象。 jmap -mp:format=b,file=f1 3024可以將3024進程的內存heap輸出出來到f1文件里。

4、jconsole 是一個用java寫的GUI程序,用來監控VM,並可監控遠程的VM,非常易用,而且功能非常強。由於是GUI程序,這里就不詳細介紹了,不會的地方可以參考SUN的官方文檔。
使用方法:命令行里打 jconsole,選則進程就可以了。

友好提示:windows查看進程號,由於任務管理器默認的情況下是不顯示進程id號的,所以可以通過如下方法加上。ctrl+alt+del打開任務管理器,選擇『進程』選項卡,點『查看』->''選擇列''->加上''PID'',就可以了。當然還有其他很好的選項。

⑸ java定位功能對系統的影響嗎

前言:我們的場景並沒有像BAT等大型互聯網公司里的系統那麼復雜,但是基本上也有一定的規模,暫且就認為我們是一個中型互聯網系統。但是工具和思路都是差不多的,因為原理是一樣的。同時下面提到的命令,具體詳細的用法,我想google上已經有足夠多的資源了,這里只說思路與方向。

首先我們分析一下伺服器構造和操作系統,伺服器我們可以簡單的分解為CPU、內存、硬碟(其他部件的我們就不考慮了),操作系統:我們簡單的認為操作系統是來協同上面說的CPU、內存、硬碟的一個系統,然而jdk bin目錄里的應用程序最後都會運行在操作系統上,所以jdk會藉助操作系統來操作CPU、內存、硬碟。 所以常見的線上問題,通常就出現在CPU、內存、硬碟和操作系統這個幾個維度上。

這里總結一下我所碰到過的問題:CPU 利用率高、內存溢出、應用程序很卡(但是又沒掛)、各種詭異問題(很難重現但總是偶爾出現)等。
首先我們來說內存,因為通常內存問題是最經常出的,常見的有內存溢出(OOM)、GC問題等。排查這些問題需要了解linux相關命令:
top 後,shift + m 來對各進程按內存進行排序
free 查看linux整體內存情況
OOM異常最好排查,因為已經溢出報錯了,常用解決辦法:

jmap 導出內存堆棧信息,並用第三方工具(比如MAT)分析,這些工具基本上可以展示到底是哪種對象最多。(這種是最常用的方法)
第三方工具在線展現具體的堆棧信息,比如:https://github.com/alibaba/TBJMap (我並沒有實際用過,但是淘寶開源的一定是他們實際用過的,但是一般此類工具最好還是在測試環境中使用)
jprofiler、jvisualvm(具體怎麼用,請google)

上面的幾種工具和思路,已經基本能搞定OOM類型的問題了

GC問題:我們所碰到過的通常會因為GC回收過於頻繁導致CPU過高,或者因為fullgc讓整個java進程暫停。此類問題可以藉助 jstat -gcutil pid查看各個區域和gc相關信息。當然一些在線工具(jprofiler、jvisualvm)也可以查看,但是不推薦線上使用,jstat已經很NB了。至於裡面具體每個欄位什麼意思,google上已經非常多了。通常查jstat + jmap分析已經基本上能讓你知道,是哪個地方的內存問題引起了GC問題。

但是,jstat上會出來很多信息,這里需要對java的內存管理有一定的了解,至少得知道,堆棧、分代機制、新生代、老生代等相關區域有一定的了解。總之要解決內存問題,得對java里的內存要了解。

CPU問題會相對來說復雜很多,CPU好比伺服器的大腦,很多其他的組件也可能會導致CPU利用率過高。總結一下我們碰到過的有以下幾中:
的確計算量過大,cpu運算不過來
IO讀寫過於頻繁
java線程競爭鎖過於頻繁
應用程序很卡(但是又沒掛)

要排查CPU相關的問題,首先得了解linux的top命令,top的功能非常多,具體每個屬性什麼意思請先google一下。
解決CPU類的問題總體思路:找到java進程中哪些線程使用CPU很高,簡單的說就是top -H -p pid,這個命令會出現java進程里哪些線程使用CPU很高,會按降序排序,但是子線程編號與jstack pid 里出來的不太一樣,jstack里出來的是16進程,所以把top -H -p里的轉成16進程,然後查找一下具體的線程。
1.的確計算量過大,cpu運算不過來

通過上面的top -H -p和 jstack基本已經能看出來這種類型的問題

2.IO讀寫過於頻繁

截圖中的wa。這個代表是cpu等待io的時間,簡單的說就是io正在處理,告訴cpu請等我一下,我處理完了就讓你去干別的。因為cpu是固定資源,它被io所持有,那麼別人就沒有辦法使用,所以就導致cpu使用率上去了。所以io wait很高就思路很清楚了,接下來就要去查看具體哪些線程在頻繁操作io。

接下來就用jstack pid 來查看具體jdk中具體線程,先掃一眼,看是否有很多線程都處於io操作的階段。但是這還不能完全解決問題,有的時候信息太多,實在不好找,一眼眼看,要看得頭痛。所以簡單點也可以使用第1點里提到的方法。

3.java線程競爭鎖過於頻繁
top -H -p和 jstack已經基本上能看出,但是這里還需要對java 線程的各種狀態要了解一下。要能理解jstack出來的線程信息里每種狀態是什麼含義。這樣才能分析出具體原因,不然跑去看代碼總感覺不應該啊,應該沒錯啊。

4.應用程序很卡(但是又沒掛)
這類問題如果業務不是很復雜,基本上用top -H -p 和 jstack可以查看得出來。但是有的時候還不能完全確定,一種常見的辦法就是打日誌,這種辦法當然是OK的。但是這里再介紹一些可以直接在線上就能定位和分析的工具。https://github.com/alibaba/TProfiler,號稱是可以線上使用的分析工具,淘寶開源的東西我們已經使用過很多了,基本上是靠譜的。

⑹ 如何監控Java垃圾回收機制5

垃圾回收收集監控指的是搞清楚JVM如何執行GC的過程,例如,我們可以查明:
1. 何時一個新生代中的對象被移動到老年代時,所花費的時間。
2. Stop-the-world 何時發生的,持續了多長時間。
GC監控是為了鑒別JVM是否在高效地執行GC,以及是否有必要進行額外的性能調優。基於以上信息,我們可以修改應用程序或者調整GC演算法(GC優化)。
如何監控GC
有很多種方法可以監控GC,但其差別僅僅是GC操作通過何種方式展現而已。GC操作是由JVM來完成,而GC監控工具只是將JVM提供的GC信息展現給你,因此,不論你使用何種方式監控GC都將得到相同的結果。所以你也就不必去學習所有的監控GC的方法。但是因為學習每種監控方法不會佔用太多時間,了解多一點可以幫助你根據不同的場景選擇最為合適的方式。
下面所列的工具以及JVM參數並不適用於所有的HVM供應商。這是因為並沒有關於GC信息的強制標准。本文我們將使用HotSpot JVM (Oracle JVM)。因為NHN 一直在使用Oracle (Sun) JVM,所以用它作為示例來解釋我們提到的工具和JVM參數更容易些。
首先,GC監控方法根據訪問的介面不同,可以分成CUI 和GUI 兩大類。CUI GC監控方法使用一個獨立的叫做」jstat」的CUI應用,或者在啟動JVM的時候選擇JVM參數」verbosegc」。
GUI GC監控由一個單獨的圖形化應用來完成,其中三個最常用的應用是」jconsole」, 「jvisualvm」 和 「Visual GC」。
下面我們來詳細學習每種方法。
jstat 是HotSpot JVM提供的一個監控工具。其他監控工具還有jps 和jstatd。有些時候,你可能需要同時使用三種工具來監控你的應用。jstat 不僅提供GC操作的信息,還提供類裝載操作的信息以及運行時編譯器操作的信息。本文將只涉及jstat能夠提供的信息中與監控GC操作信息相關的功能。
jstat 被放置在$JDK_HOME/bin。因此只要java 和 javac能執行,jstat 同樣可以執行。

⑺ 如何查看java虛擬機堆內存的參數值

請確保java_home/bin配置到path環境變數下,因為這些工具都在jdk的bin目錄下

jps(JVM Process Status Tool):JVM機進程狀況工具

用來查看基於HotSpot JVM裡面所有進程的具體狀態, 包括進程ID,進程啟動的路徑等等。與unix上的ps類似,用來顯示本地有許可權的java進程,可以查看本地運行著幾個java程序,並顯示他們的進程號。使用jps時,不需要傳遞進程號做為參數。
Jps也可以顯示遠程系統上的JAVA進程,這需要遠程服務上開啟了jstat服務,以及RMI注及服務,不過常用都是對本對的JAVA進程的查看。
命令格式:jps [ options ] [ hostid ]
常用參數說明:
-m 輸出傳遞給main方法的參數,如果是內嵌的JVM則輸出為null。
-l 輸出應用程序主類的完整包名,或者是應用程序JAR文件的完整路徑。
-v 輸出傳給JVM的參數。
例如:
C:\Users\Administrator>jps -lmv
1796 -Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m -XX:MaxPermSize=256m
7340 sun.tools.jps.Jps -lmv -Denv.class.path=.;D:\DevTools\VM\jdk1.6.0_31\\lib\dt.jar;D:\DevTools\VM\jdk1.6.0_31\\lib\tools.jar; -Dapplication.home=D:\DevTools\VM\jdk1.6.0_31 -Xms8m
其中pid為1796的是我的eclipse進程,pid為7340的是jps命令本身的進程

jinfo(Configuration Info for Java):JVM配置信息工具

可以輸出並修改運行時的java 進程的opts。用處比較簡單,用於輸出JAVA系統參數及命令行參數
命令格式:jinfo [ options ] [ pid ]
常用參數說明:
-flag 輸出,修改,JVM命令行參數
例如:
C:\Users\Administrator>jinfo 1796
將會列印出很多jvm運行時參數信息,由於比較長這里不再列印出來,可以自己試試,內容一目瞭然

Jstack(Stack Trace for Java):JVM堆棧跟蹤工具
jstack用於列印出給定的java進程ID或core file或遠程調試服務的Java堆棧信息,如果是在64位機器上,需要指定選項"-J-d64「
命令格式:jstack [ option ] pid
常用參數說明:
-F 當』jstack [-l] pid』沒有相應的時候強制列印棧信息
-l 長列表. 列印關於鎖的附加信息,例如屬於java.util.concurrent的ownable synchronizers列表.
-m 列印java和native c/c++框架的所有棧信息.
-h | -help列印幫助信息
例如:
C:\Users\Administrator>jstack 1796
2013-05-22 11:42:38
Full thread mp Java HotSpot(TM) Client VM (20.6-b01 mixed mode):

"Worker-30" prio=6 tid=0x06514c00 nid=0x1018 in Object.wait() [0x056af000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188)
- locked <0x1ad84a90> (a org.eclipse.core.internal.jobs.WorkerPool)
at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50)
......
......
......
......

jstat(JVM statistics Monitoriing Tool):JVM統計信息監視工具

對Java應用程序的資源和性能進行實時的命令行的監控,包括了對Heap size和垃圾回收狀況的監控
命令格式:jstat [ option pid [interval [ s | ms ] [count] ] ]
常用參數說明:
-gcutil 輸出已使用空間占總空間的百分比
-gccapacity 輸出堆中各個區域使用到的最大和最小空間
例如:每隔1秒監控jvm內存一次,共監控5次
C:\Users\Administrator>jstat -gccapacity 1796 1s 5
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
13632.0 174720.0 40896.0 4032.0 4032.0 32832.0 27328.0 349568.0 81684.0 81684.0 12288.0 262144.0 80640.0 80640.0 42 96
13632.0 174720.0 40896.0 4032.0 4032.0 32832.0 27328.0 349568.0 81684.0 81684.0 12288.0 262144.0 80640.0 80640.0 42 96
13632.0 174720.0 40896.0 4032.0 4032.0 32832.0 27328.0 349568.0 81684.0 81684.0 12288.0 262144.0 80640.0 80640.0 42 96
13632.0 174720.0 40896.0 4032.0 4032.0 32832.0 27328.0 349568.0 81684.0 81684.0 12288.0 262144.0 80640.0 80640.0 42 96
13632.0 174720.0 40896.0 4032.0 4032.0 32832.0 27328.0 349568.0 81684.0 81684.0 12288.0 262144.0 80640.0 80640.0 42 97
C:\Users\Administrator>jstat -gcutil 1796 1s 5
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.00 0.52 53.35 99.77 42 0.513 99 38.119 38.632
0.00 0.00 0.52 53.35 99.77 42 0.513 99 38.119 38.632
0.00 0.00 0.52 53.35 99.77 42 0.513 99 38.119 38.632
0.00 0.00 0.52 53.35 99.77 42 0.513 99 38.119 38.632
0.00 0.00 0.52 53.35 99.77 42 0.513 99 38.119 38.632
一些術語的中文解釋:
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 : 最大持有次數限制

jmap( Memory Map for Java):JVM內存映像工具

列印出某個java進程(使用pid)內存內的所有『對象』的情況(如:產生那些對象,及其數量)
命令格式:jmap [ option ] pid
常用參數說明:
-mp:[live,]format=b,file=<filename> 使用二進制形式輸出jvm的heap內容到文件中, live子選項是可選的,假如指定live選項,那麼只輸出活的對象到文件.
-histo[:live] 列印每個class的實例數目,內存佔用,類全名信息. VM的內部類名字開頭會加上前綴」*」. 如果live子參數加上後,只統計活的對象數量.
-F 強迫.在pid沒有相應的時候使用-mp或者-histo參數. 在這個模式下,live子參數無效.
例如:以二進制形式輸入當前堆內存映像到文件data.hprof中
jmap -mp:live,format=b,file=data.hprof 1796
生成的文件可以使用jhat工具進行分析,在OOM(內存溢出)時,分析大對象,非常有用
通過使用如下參數啟動JVM,也可以獲取到mp文件:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./java_pid<pid>.hprof
在jvm發生內存溢出時生成內存映像文件

jhat(JVM Heap Analysis Tool):JVM堆轉儲快照分析工具

用於對JAVA heap進行離線分析的工具,他可以對不同虛擬機中導出的heap信息文件進行分析,如LINUX上導出的文件可以拿到WINDOWS上進行分析,可以查找諸如內存方面的問題。
命令格式:jhat mpfile(jmap生成的文件)
例如:分析jmap導出的內存映像
jhat data.hprof
執行成功後,訪問http://localhost:7000即可查看內存信息,

MAT(Memory Analyzer Tool):一個基於Eclipse的內存分析工具

官網: http://www.eclipse.org/mat/
update:http://download.eclipse.org/mat/1.2/update-site/
這是eclipse的一個插件,安裝後可以打開xxx.hprof文件,進行分析,比jhat更方便使用,有些時候由於線上xxx.hprof文件過大,直接使用jhat進行初步分析了,可以的話拷貝到本地分析效果更佳。

圖形化監控工具:

在JDK安裝目錄bin下面有兩個可視化監控工具
1. JConsole(Java Monitoring and Management Console) 基於JMX的可視化管理工具。
2. VisualVM(All-in-one Java Troubleshooting Tool)隨JDK發布的最強大的運行監視和故障處理程序。
推薦使用VisualVM,他有很多插件,可以更方便的監控運行時JVM

⑻ java學習筆記林信良操作題答案

jstat(JVM Statistics Monitoring Tool)是用於監控虛擬機各種運行狀態信息的命令行工具。他可以顯示本地或遠程虛擬機進程中的類裝載、內存、垃圾收集、JIT編譯等運行數據,在沒有GUI圖形的伺服器上,它是運行期定位虛擬機性能問題的首選工具。

jstat位於java的bin目錄下,主要利用JVM內建的指令對Java應用程序的資源和性能進行實時的命令行的監控,包括了對Heap size和垃圾回收狀況的監控。可見,Jstat是輕量級的、專門針對JVM的工具,非常適用。

jstat 命令格式

jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

參數解釋:

Option — 選項,我們一般使用 -gcutil 查看gc情況
vmid — VM的進程號,即當前運行的java進程號
interval– 間隔時間,單位為秒或者毫秒
count — 列印次數,如果預設則列印無數次

參數interval和count代表查詢間隔和次數,如果省略這兩個參數,說明只查詢一次。假設需要每250毫秒查詢一次進程5828垃圾收集狀況,一共查詢5次,那命令行如下:

jstat -gc 5828 250 5

對於命令格式中的VMID與LVMID需要特別說明下:如果是本地虛擬機進程,VMID(Virtual Machine IDentifier,虛機標識符)和LVMID(Local Virtual Machine IDentifier,虛機標識符)是一致的,如果是遠程虛擬機進程,那VMID的格式應當是:[protocol:][//] lvmid [@hostname[:port]/servername]

option

選項option代表這用戶希望查詢的虛擬機信息,主要分為3類:類裝載、垃圾收集和運行期編譯狀況,具體選項及作用如下:

–class 監視類裝載、卸載數量、總空間及類裝載所耗費的時間
–gc 監視Java堆狀況,包括Eden區、2個Survivor區、老年代、永久代等的容量
–gccapacity 監視內容與-gc基本相同,但輸出主要關注Java堆各個區域使用到的最大和最小空間
–gcutil 監視內容與-gc基本相同,但輸出主要關注已使用空間占總空間的百分比
–gccause 與-gcutil功能一樣,但是會額外輸出導致上一次GC產生的原因
–gcnew 監視新生代GC的狀況
–gcnewcapacity 監視內容與-gcnew基本相同,輸出主要關注使用到的最大和最小空間
–gcold 監視老年代GC的狀況
–gcoldcapacity 監視內容與——gcold基本相同,輸出主要關注使用到的最大和最小空間
–gcpermcapacity 輸出永久代使用到的最大和最小空間
–compiler 輸出JIT編譯器編譯過的方法、耗時等信息
–printcompilation 輸出已經被JIT編譯的方法

常見術語

1、jstat –class<pid> : 顯示載入class的數量,及所佔空間等信息。

Loaded 裝載的類的數量
Bytes 裝載類所佔用的位元組數
Unloaded 卸載類的數量
Bytes 卸載類的位元組數
Time 裝載和卸載類所花費的時間

2、jstat -compiler <pid>顯示VM實時編譯的數量等信息。

Compiled 編譯任務執行數量
Failed 編譯任務執行失敗數量
Invalid 編譯任務執行失效數量
Time 編譯任務消耗時間
FailedType 最後一個編譯失敗任務的類型
FailedMethod 最後一個編譯失敗任務所在的類及方法

3、jstat -gc <pid>: 可以顯示gc的信息,查看gc的次數,及時間。

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)

4、jstat -gccapacity <pid>:可以顯示,VM內存中三代(young,old,perm)對象的使用和佔用大小

NGCMN 年輕代(young)中初始化(最小)的大小(位元組)
NGCMX 年輕代(young)的最大容量 (位元組)
NGC 年輕代(young)中當前的容量 (位元組)
S0C 年輕代中第一個survivor(倖存區)的容量 (位元組)
S1C 年輕代中第二個survivor(倖存區)的容量 (位元組)
EC 年輕代中Eden(伊甸園)的容量 (位元組)
OGCMN old代中初始化(最小)的大小 (位元組)
OGCMX old代的最大容量(位元組)
OGC old代當前新生成的容量 (位元組)
OC Old代的容量 (位元組)
PGCMN perm代中初始化(最小)的大小 (位元組)
PGCMX perm代的最大容量 (位元組)
PGC perm代當前新生成的容量 (位元組)
PC Perm(持久代)的容量 (位元組)
YGC 從應用程序啟動到采樣時年輕代中gc次數
FGC 從應用程序啟動到采樣時old代(全gc)gc次數

5、jstat -gcutil <pid>:統計gc信息

S0 年輕代中第一個survivor(倖存區)已使用的占當前容量百分比
S1 年輕代中第二個survivor(倖存區)已使用的占當前容量百分比
E 年輕代中Eden(伊甸園)已使用的占當前容量百分比
O old代已使用的占當前容量百分比
P perm代已使用的占當前容量百分比
YGC 從應用程序啟動到采樣時年輕代中gc次數
YGCT 從應用程序啟動到采樣時年輕代中gc所用時間(s)
FGC 從應用程序啟動到采樣時old代(全gc)gc次數
FGCT 從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
GCT 從應用程序啟動到采樣時gc用的總時間(s)

6、jstat -gcnew <pid>:年輕代對象的信息。

S0C 年輕代中第一個survivor(倖存區)的容量 (位元組)
S1C 年輕代中第二個survivor(倖存區)的容量 (位元組)
S0U 年輕代中第一個survivor(倖存區)目前已使用空間 (位元組)
S1U 年輕代中第二個survivor(倖存區)目前已使用空間 (位元組)
TT 持有次數限制
MTT 最大持有次數限制
EC 年輕代中Eden(伊甸園)的容量 (位元組)
EU 年輕代中Eden(伊甸園)目前已使用空間 (位元組)
YGC 從應用程序啟動到采樣時年輕代中gc次數
YGCT 從應用程序啟動到采樣時年輕代中gc所用時間(s)

7、jstat -gcnewcapacity<pid>: 年輕代對象的信息及其佔用量。

NGCMN 年輕代(young)中初始化(最小)的大小(位元組)
NGCMX 年輕代(young)的最大容量 (位元組)
NGC 年輕代(young)中當前的容量 (位元組)
S0CMX 年輕代中第一個survivor(倖存區)的最大容量 (位元組)
S0C 年輕代中第一個survivor(倖存區)的容量 (位元組)
S1CMX 年輕代中第二個survivor(倖存區)的最大容量 (位元組)
S1C 年輕代中第二個survivor(倖存區)的容量 (位元組)
ECMX 年輕代中Eden(伊甸園)的最大容量 (位元組)
EC 年輕代中Eden(伊甸園)的容量 (位元組)
YGC 從應用程序啟動到采樣時年輕代中gc次數
FGC 從應用程序啟動到采樣時old代(全gc)gc次數

8、jstat -gcold <pid>:old代對象的信息。

PC Perm(持久代)的容量 (位元組)
PU Perm(持久代)目前已使用空間 (位元組)
OC Old代的容量 (位元組)
OU Old代目前已使用空間 (位元組)
YGC 從應用程序啟動到采樣時年輕代中gc次數
FGC 從應用程序啟動到采樣時old代(全gc)gc次數
FGCT 從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
GCT 從應用程序啟動到采樣時gc用的總時間(s)

9、stat -gcoldcapacity <pid>: old代對象的信息及其佔用量。

OGCMN old代中初始化(最小)的大小 (位元組)
OGCMX old代的最大容量(位元組)
OGC old代當前新生成的容量 (位元組)
OC Old代的容量 (位元組)
YGC 從應用程序啟動到采樣時年輕代中gc次數
FGC 從應用程序啟動到采樣時old代(全gc)gc次數
FGCT 從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
GCT 從應用程序啟動到采樣時gc用的總時間(s)

10、jstat -gcpermcapacity<pid>: perm對象的信息及其佔用量。

PGCMN perm代中初始化(最小)的大小 (位元組)
PGCMX perm代的最大容量 (位元組)
PGC perm代當前新生成的容量 (位元組)
PC Perm(持久代)的容量 (位元組)
YGC 從應用程序啟動到采樣時年輕代中gc次數
FGC 從應用程序啟動到采樣時old代(全gc)gc次數
FGCT 從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
GCT 從應用程序啟動到采樣時gc用的總時間(s)

11、jstat -printcompilation <pid>:當前VM執行的信息。

Compiled 編譯任務的數目
Size 方法生成的位元組碼的大小
Type 編譯類型
Method 類名和方法名用來標識編譯的方法。類名使用/做為一個命名空間分隔符。方法名是給定類中的方法。上述格式是由-XX:+PrintComplation選項進行設置的

⑼ 使用jstat需要在jvm中配置添加什麼參數

典型JVM參數設置: java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -Xmx3550m:設置JVM最大可用內存為3550M。 -Xms3550m:設置JVM促使內存為3550m。此值可以設置與-Xmx相同,以避免每次垃圾回收完成後JVM重新分配內存。使用jstat需要在jvm中配置添加什麼參數

熱點內容
內存大小的存儲 發布:2025-01-22 18:58:17 瀏覽:392
tampermonkey腳本 發布:2025-01-22 18:53:17 瀏覽:116
windows7共享文件夾 發布:2025-01-22 18:53:17 瀏覽:478
如何調節安卓手機的內存 發布:2025-01-22 18:49:30 瀏覽:638
佳能相機存儲卡怎麼取消 發布:2025-01-22 18:40:59 瀏覽:568
天貓寶貝上傳 發布:2025-01-22 18:35:09 瀏覽:544
ipad如何登錄金鏟鏟安卓賬號 發布:2025-01-22 18:32:09 瀏覽:319
加密溝通 發布:2025-01-22 18:31:22 瀏覽:555
win7ftp用戶名和密碼設置 發布:2025-01-22 17:46:48 瀏覽:221
三表聯查的sql語句 發布:2025-01-22 17:27:13 瀏覽:418