日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

GC之七--gc日志分析工具

發(fā)布時(shí)間:2024/7/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GC之七--gc日志分析工具 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

性能測(cè)試排查定位問題,分析調(diào)優(yōu)過程中,會(huì)遇到要分析gc日志,人肉分析gc日志有時(shí)比較困難,相關(guān)圖形化或命令行工具可以有效地幫助輔助分析。

Gc日志參數(shù)

通過在tomcat啟動(dòng)腳本中添加相關(guān)參數(shù)生成gc日志

-verbose.gc開關(guān)可顯示GC的操作內(nèi)容。打開它,可以顯示最忙和最空閑收集行為發(fā)生的時(shí)間、收集前后的內(nèi)存大小、收集需要的時(shí)間等。

打開-xx:+ printGCdetails開關(guān),可以詳細(xì)了解GC中的變化。

打開-XX: + PrintGCTimeStamps開關(guān),可以了解這些垃圾收集發(fā)生的時(shí)間,自JVM啟動(dòng)以后以秒計(jì)量。

最后,通過-xx: + PrintHeapAtGC開關(guān)了解堆的更詳細(xì)的信息。

為了了解新域的情況,可以通過-XX:=PrintTenuringDistribution開關(guān)了解獲得使用期的對(duì)象權(quán)。

-Xloggc:$CATALINA_BASE/logs/gc.log?gc日志產(chǎn)生的路徑

XX:+PrintGCApplicationStoppedTime?//?輸出GC造成應(yīng)用暫停的時(shí)間

-XX:+PrintGCDateStamps?// GC發(fā)生的時(shí)間信息

Gc日志

2016-11-23T11:01:27.738+0800: 0.150: [GC [PSYoungGen: 331K->288K(5952K)] 331K->288K(19648K), 0.0006495 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 2016-11-23T11:01:27.739+0800: 0.152: [Full GC (System) [PSYoungGen: 288K->0K(5952K)] [PSOldGen: 0K->164K(13696K)] 288K->164K(19648K) [PSPermGen: 3054K->3054K(21248K)], 0.0059625 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 2016-11-23T11:01:27.852+0800: 0.264: [GC [PSYoungGen: 103K->64K(5952K)] 267K->228K(19648K), 0.0066830 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 2016-11-23T11:01:27.859+0800: 0.271: [Full GC (System) [PSYoungGen: 64K->0K(5952K)] [PSOldGen: 164K->165K(13696K)] 228K->165K(19648K) [PSPermGen: 3060K->3060K(21248K)], 0.0052429 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]

日志中顯示了gc發(fā)生的時(shí)間,young區(qū)回收情況,整體回收情況,fullGC情況,回收所消耗時(shí)間等.

?

常用JVM參數(shù)

分析gc日志后,經(jīng)常需要調(diào)整jvm內(nèi)存相關(guān)參數(shù),常用參數(shù)如下

-Xms初始堆大小,默認(rèn)為物理內(nèi)存的1/64(<1GB);默認(rèn)(MinHeapFreeRatio參數(shù)可以調(diào)整)空余堆內(nèi)存小于40%時(shí),JVM就會(huì)增大堆直到-Xmx的最大限制

-Xmx:最大堆大小,默認(rèn)(MaxHeapFreeRatio參數(shù)可以調(diào)整)空余堆內(nèi)存大于70%時(shí),JVM會(huì)減少堆直到?-Xms的最小限制

-Xmn新生代的內(nèi)存空間大小,注意:此處的大小是(eden+ 2 survivor space)。與jmap -heap中顯示的New gen是不同的。整個(gè)堆大小=新生代大小?+?老生代大小?+?永久代大小。?
在保證堆大小不變的情況下,增大新生代后,將會(huì)減小老生代大小。此值對(duì)系統(tǒng)性能影響較大,Sun官方推薦配置為整個(gè)堆的3/8。

-XX:SurvivorRatio新生代中Eden區(qū)域與Survivor區(qū)域的容量比值,默認(rèn)值為8。兩個(gè)Survivor區(qū)與一個(gè)Eden區(qū)的比值為2:8,一個(gè)Survivor區(qū)占整個(gè)年輕代的1/10。

-Xss每個(gè)線程的堆棧大小。JDK5.0以后每個(gè)線程堆棧大小為1M,以前每個(gè)線程堆棧大小為256K。應(yīng)根據(jù)應(yīng)用的線程所需內(nèi)存大小進(jìn)行適當(dāng)調(diào)整。在相同物理內(nèi)存下,減小這個(gè)值能生成更多的線程。但是操作系統(tǒng)對(duì)一個(gè)進(jìn)程內(nèi)的線程數(shù)還是有限制的,不能無(wú)限生成,經(jīng)驗(yàn)值在3000~5000左右。一般小的應(yīng)用, 如果棧不是很深, 應(yīng)該是128k夠用的,大的應(yīng)用建議使用256k。這個(gè)選項(xiàng)對(duì)性能影響比較大,需要嚴(yán)格的測(cè)試。和threadstacksize選項(xiàng)解釋很類似,官方文檔似乎沒有解釋,在論壇中有這樣一句話:"-Xss is translated in a VM flag named ThreadStackSize”一般設(shè)置這個(gè)值就可以了。

-XX:PermSize設(shè)置永久代(perm gen)初始值。默認(rèn)值為物理內(nèi)存的1/64。

-XX:MaxPermSize設(shè)置持久代最大值。物理內(nèi)存的1/4。

?

Gc日志分析工具

(1)GCHisto

http://java.net/projects/gchisto

優(yōu)點(diǎn):可以橫向?qū)Ρ?#xff0c;如jvm參數(shù)調(diào)整前和調(diào)整后進(jìn)行對(duì)比等。

直接點(diǎn)擊gchisto.jar就可以運(yùn)行,點(diǎn)add載入gc.log

統(tǒng)計(jì)了總共gc次數(shù),youngGC次數(shù),FullGC次數(shù),次數(shù)的百分比,GC消耗的時(shí)間,百分比,平均消耗時(shí)間,消耗時(shí)間最小最大值等

示例:?jdk1.6,jvm參數(shù)為:-Xmx20m -XX:MaxDirectMemorySize=10m -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc1.6.log

2016-11-23T11:01:27.738+0800: 0.150: [GC [PSYoungGen: 331K->288K(5952K)] 331K->288K(19648K), 0.0006495 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 2016-11-23T11:01:27.739+0800: 0.152: [Full GC (System) [PSYoungGen: 288K->0K(5952K)] [PSOldGen: 0K->164K(13696K)] 288K->164K(19648K) [PSPermGen: 3054K->3054K(21248K)], 0.0059625 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 2016-11-23T11:01:27.852+0800: 0.264: [GC [PSYoungGen: 103K->64K(5952K)] 267K->228K(19648K), 0.0066830 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 2016-11-23T11:01:27.859+0800: 0.271: [Full GC (System) [PSYoungGen: 64K->0K(5952K)] [PSOldGen: 164K->165K(13696K)] 228K->165K(19648K) [PSPermGen: 3060K->3060K(21248K)], 0.0052429 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]

GCHisto展示:

統(tǒng)計(jì)的圖形化表示

YoungGC,FullGC不同消耗時(shí)間上次數(shù)的分布圖,勾選可以顯示youngGC或fullGC單獨(dú)的分布情況

整個(gè)時(shí)間過程詳細(xì)的gc情況,可以對(duì)整個(gè)過程進(jìn)行剖析

?

???

(2)GCLogViewer

只支持jdk1.6(32位),jdk7,jdk8不支持。

http://code.google.com/p/gclogviewer/

點(diǎn)擊run.bat運(yùn)行

整個(gè)過程gc情況的趨勢(shì)圖,還顯示了gc類型,吞吐量,平均gc頻率,內(nèi)存變化趨勢(shì)等

Tools里還能比較不同gc日志

(3)HPjmeter

獲取地址?http://www.hp.com/go/java
參考文檔?http://www.javaperformancetuning.com/tools/hpjtune/index.shtml

工具很強(qiáng)大,但只能打開由以下參數(shù)生成的GC log,?-verbose:gc -Xloggc:gc.log,添加其他參數(shù)生成的gc.log無(wú)法打開。

?

(4)GCViewer

http://www.tagtraum.com/gcviewer.html

這個(gè)工具用的挺多的,但只能在JDK1.5以下的版本中運(yùn)行,1.6以后沒有對(duì)應(yīng)。

(5)garbagecat

http://code.google.com/a/eclipselabs.org/p/garbagecat/wiki/Documentation

?

其它監(jiān)控方法

Jvisualvm動(dòng)態(tài)分析jvm內(nèi)存情況和gc情況,插件:visualGC

?

??

jvisualvm還可以heapdump出對(duì)應(yīng)hprof文件(默認(rèn)存放路徑:監(jiān)控的服務(wù)器?/tmp下),利用相關(guān)工具,比如HPjmeter可以對(duì)其進(jìn)行分析

grep Full gc.log粗略觀察FullGC發(fā)生頻率

jstat –gcutil [pid] [intervel] [count]

jmap -histo pid可以觀測(cè)對(duì)象的個(gè)數(shù)和占用空間
jmap -heap pid可以觀測(cè)jvm配置參數(shù),堆內(nèi)存各區(qū)使用情況

jprofiler,jmap dump出來(lái)用MAT分析

?

如果要分析的dump文件很大的話,就需要很多內(nèi)存,很容易crash。

所以在啟動(dòng)時(shí),我們應(yīng)該加上一些參數(shù):?Java?–Xms512M?–Xmx1024M?–Xss8M?

??

參考資料:

(一)探秘Java虛擬機(jī)——內(nèi)存管理與垃圾回收http://sunbean.blog.51cto.com/972509/768034

轉(zhuǎn)載于:https://www.cnblogs.com/duanxz/p/6092911.html

總結(jié)

以上是生活随笔為你收集整理的GC之七--gc日志分析工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。