tomcat記憶體溢位問題監控工具

regonly1發表於2008-07-21


針對杭州數字電視系統記憶體溢位的問題,對tomcat做了兩種監控方式。
注:以下配置都配置到catalina.sh檔案中。

一、gclog,這種方式用於觀察記憶體回收情況,顯示的內容如下所示:
211847: [GC 211847: [DefNew: 57509K->1728K(57664K), 0.0321256 secs] 281236K->225664K(523712K), 0.0322686 secs]
212394: [GC 212394: [DefNew: 57663K->1308K(57664K), 0.0330551 secs] 281600K->225730K(523712K), 0.0332203 secs]
212951: [GC 212951: [DefNew: 57244K->1469K(57664K), 0.0277455 secs] 281666K->225899K(523712K), 0.0278909 secs]

如何配置gc log,下面是幾個常用的gclog的配置:
1、開啟gclog,這個步驟是必須的:
JAVA_OPTS="$JAVA_OPTS -verbose:gc"

2、顯示gclog中的時間戳,可選:
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCTimeStamps"

3、列印gclog的詳細資訊,可選:
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails"

4、配置gclog的日誌檔案路徑(路徑為自定義),必選:
JAVA_OPTS="$JAVA_OPTS -Xloggc:/traindvb/dvbtrain/tomcat/gclogs/gc.log"

5、重啟tomcat。

如何觀察:
以下面這段為例:
212951: [GC 212951: [DefNew: 57244K->1469K(57664K), 0.0277455 secs] 281666K->225899K(523712K), 0.0278909 secs]
主要以兩個箭頭為參考(->)
第一個箭頭:57244K->1469K,箭頭指向的是新生段的記憶體佔用情況;
第二個箭頭:281666K->225899K,箭頭指向的是回收後的記憶體佔用情況。
圓括號中通常指的是當前申請的記憶體大小。


二、heap dump監測方法。這種方式用於抓取當時tomcat的執行的各模組的記憶體佔用情況,顯示的內容通常如下:
16400   [char   8192    "..............................................................."
24      java.util.HashMap$Entry
56      java.net.URL
56      java.net.URL
32      sun.misc.URLClassPath$JarLoader
24      java.lang.String
24      java.lang.String
24      java.lang.String
24      java.lang.String
80      [java.util.HashMap$Entry
前面的數字表示佔用的位元組數。

如何配置:
1、將動態庫libheapprofile.so,放到/usr/lib/目錄下;
2、在catalina.sh檔案中加入如下配置:
   JAVA_OPTS="$JAVA_OPTS -Xrunheapprofile"
3、重啟tomcat即可。

如何觀察:
當透過觀察gclog,發現記憶體已經溢位或,記憶體佔用已經超過正常值很多時(
以杭州dtvoss為例:日常佔用在600-700M,較高時會在1500M左右,通常頁面上只要能夠正常使用,記憶體還是正常的,
但是如果記憶體達到1800M-2000M,則視為已經溢位),執行kill -3 [java pid]。
此時(有可能要等1-2分鐘),會在$TOMCAT_HOME/bin下生成一個heap.dump檔案,這個檔案通常要過10分鐘左右
才能完全生成(判斷是否已經生成的辦法是,觀察這個檔案的大小是否還在改變,如果大小停止變化了,則說明已經生
成好了)。
檔案生成後,用 cut -f 2

可參考的文件:
http://www.mail-archive.com/cocoon-dev@xml.apache.org/msg31401.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-406715/,如需轉載,請註明出處,否則將追究法律責任。

相關文章