• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大龍的博客

            常用鏈接

            統計

            最新評論

            使用Jstat監控gc情況

            性能測試過程中,我們該如何監控java虛擬機內存的使用情況,用以判斷JVM是否存在內存問題呢?如何判斷JVM垃圾回收是否正常?一般的top指令基本上滿足不了這樣的需求,因為它主要監控的是總體的系統資源,很難定位到java應用程序。
            在項目實踐過程中,我們探索和使用了一款新工具--Jstat。
                先秀一下。Jstat是JDK自帶的一個輕量級小工具。全稱“Java Virtual Machine statistics monitoring tool”,它位于java的bin目錄下,主要利用JVM內建的指令對Java應用程序的資源和性能進行實時的命令行的監控,包括了對Heap size和垃圾回收狀況的監控。可見,Jstat是輕量級的、專門針對JVM的工具,非常適用。
            那,該怎么用呢?
                語法結構如下:jstat [Options] vmid [interval] [count]
                Options — 選項,我們一般使用 -gcutil 查看gc情況
                vmid    — VM的進程號,即當前運行的java進程號
                interval– 間隔時間,單位為秒或者毫秒
                count   — 打印次數,如果缺省則打印無數次
                下面給出一個實際的例子:

                        

            注:由于JVM內存設置較大,圖中百分比變化不太明顯

                圖中參數含義如下:

                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 — 從應用程序啟動到采樣時用于垃圾回收的總時間(單位秒)

                上圖的示例,紅框中,我們可以看到,5次young gc之后,垃圾內存被從Eden space區(E)放入了Old space區(O),并引起了百分比的變化,導致Survivor space使用的百分比從19.69%(S0)降到10.34%(S1)。有效釋放了內存空間。綠框中,我們可以看到,一次full gc之后,Old space區(O)的內存被回收,從36.81%降到35.01%。

                圖中同時打印了young gc和full gc的總次數、總耗時。而,每次young gc消耗的時間,可以用相間隔的兩行YGCT相減得到。每次full gc消耗的時間,可以用相隔的兩行FGCT相減得到。例如紅框中表示的第一行、第二行之間發生了1次young gc,消耗的時間為52.281-52.252=0.029秒。

                常駐內存區(P)的使用率,始終停留在37.6%左右,說明常駐內存沒有突變,比較正常。

            如果young gc和full gc能夠正常發生,而且都能有效回收內存,常駐內存區變化不明顯,則說明java內存釋放情況正常,垃圾回收及時,java內存泄露的幾率就會大大降低。但也不能說明一定沒有內存泄露。

                以上,介紹了Jstat按百分比查看gc情況的功能。其實,它還有其它功能,例如加載類信息統計功能、內存池信息統計功能等,那些是以絕對值的形式打印出來的,比較少用,在此就不做介紹。

              

                為了更全面的監控JVM內存使用情況,我們需要引入更強大的工具來進一步分析–JConsole。敬請關注。

            --------

            一、概述

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

            Java代碼 復制代碼
            1. jps   
            2. :與unix上的ps類似,用來顯示本地的java進程,可以查看本地運行著幾個java程序,并顯示他們的進程號。   
            3.   
            4. jstat   
            5. :一個極強的監視VM內存工具。可以用來監視VM內存內的各種堆和非堆的大小及其內存使用量。   
            6.   
            7. jmap   
            8. :打印出某個java進程(使用pid)內存內的,所有‘對象’的情況(如:產生那些對象,及其數量)。   
            9.   
            10. jconsole   
            11. :一個java GUI監視工具,可以以圖表化的形式顯示各種數據。并可通過遠程連接監視遠程的服務器VM。  

            二、 使用介紹: 
                
                1、jstat :我想很多人都是用過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 -dump:format=b,file=f1 3024可以將3024進程的內存heap輸出出來到f1文件里。 
                
                4、jconsole 是一個用java寫的GUI程序,用來監控VM,并可監控遠程的VM,非常易用,而且功能非常強。由于是GUI程序,這里就不詳細介紹了,不會的地方可以參考SUN的官方文檔。 
                使用方法:命令行里打 jconsole,選則進程就可以了。 
                
                友好提示:windows查看進程號,由于任務管理器默認的情況下是不顯示進程id號的,所以可以通過如下方法加上。ctrl+alt+del打開任務管理器,選擇‘進程’選項卡,點‘查看’->''選擇列''->加上''PID'',就可以了。當然還有其他很好的選項。

            三、參考資料:

                article:http://elf8848.javaeye.com/blog/442806


                jps:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jps.html


                jstat:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstat.html


                jmap:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jmap.html


                jconsole:http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html    

            posted on 2011-10-11 19:37 大龍 閱讀(318) 評論(0)  編輯 收藏 引用

            久久综合给合久久狠狠狠97色 | 亚洲午夜精品久久久久久app| 国产精品99久久免费观看| 精品国产乱码久久久久久呢| 久久久久久久久久免免费精品 | 久久免费的精品国产V∧| 99精品久久精品| 99精品久久久久中文字幕| 久久人人添人人爽添人人片牛牛 | 久久精品18| 国产一区二区精品久久岳| 久久综合久久综合亚洲| 久久人人爽人人爽人人片AV高清| 青青草国产精品久久久久| 久久精品国产精品国产精品污| 超级碰久久免费公开视频| 欧美久久综合九色综合| 人人狠狠综合久久88成人| 亚洲精品无码久久久久去q| 丁香久久婷婷国产午夜视频| 久久亚洲高清观看| 久久影视综合亚洲| 久久国产精品99精品国产987| av国内精品久久久久影院| 精品国产一区二区三区久久蜜臀| 久久久久黑人强伦姧人妻| 久久久噜噜噜久久中文字幕色伊伊 | 欧美日韩成人精品久久久免费看 | 色婷婷综合久久久久中文字幕| 亚洲午夜无码AV毛片久久| 久久久久人妻精品一区二区三区| 久久国产精品99久久久久久老狼 | 久久人人爽爽爽人久久久| 久久国产精品久久| 中文字幕无码久久精品青草| 一本色道久久99一综合| 91精品国产高清久久久久久io| 国产∨亚洲V天堂无码久久久| 国产精品欧美久久久久无广告| 久久妇女高潮几次MBA| 久久99国产一区二区三区|