posts - 28,  comments - 15,  trackbacks - 0

           

          系統(tǒng)有時(shí)會(huì)遇到OutOfMemoryError,Java堆溢出了。我們需要找到造成OutOfMemoryError原因。一般有兩種情況:

          1、內(nèi)存泄露,對(duì)象已經(jīng)死了,無法通過垃圾收集器進(jìn)行自動(dòng)回收;

          2、內(nèi)存溢出,內(nèi)存中的對(duì)象都還必須存活著,這說明Java堆分配空間不足,檢查堆設(shè)置大小(-Xmx與-Xms),檢查代碼是否存在對(duì)象生命周期太長(zhǎng)、持有狀態(tài)時(shí)間過長(zhǎng)的情況。


          想在泄漏未發(fā)生前,取堆轉(zhuǎn)儲(chǔ)文件分析, 通過jvm參數(shù)-XX:+HeapDumpOnOutOfMemoryError(XX:+HeapDumpOnCtrlBreak不知道為什么tomcat啟動(dòng)不了)可以讓JVM在出現(xiàn)內(nèi)存溢出是Dump出當(dāng)前的內(nèi)存轉(zhuǎn)儲(chǔ)快照。

          當(dāng)然也可以通過用jmap生產(chǎn)dump文件。windows通過任務(wù)管理器查看tomcat的進(jìn)程pid,linux用ps命令查看進(jìn)程pid,然后用jmap命令(Java5:jmap -heap:format=b <pid>;Java6:jmap -dump:format=b,file=HeapDump.bin <pid>)

           

          在tomcat中設(shè)置jvm參數(shù)

          linux系統(tǒng)中

          1.打開/tomcat_home/bin/catalina.sh文件 

          2.加上:JAVA_OPTS="$JAVA_OPTS -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\heapdump"

          如下圖位置:

          注:其中不設(shè)-XX:HeapDumpPath時(shí),dump出的文件在/tomcat_home/bin目錄下

          Windows系統(tǒng)中

          1.打開/tomcat_home/bin/catalina.bat文件

          2.加上:set JAVA_OPTS=%JAVA_OPTS% -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\heapdump

          如下圖位置:

           

          分析dump出來的內(nèi)存快照文件


          可以使用分析工具進(jìn)行分析,如:

           

          Eclipse的MAT

          下載地址:http://www.eclipse.org/mat/downloads.php

          說明文檔:http://www.vogella.com/articles/EclipseMemoryAnalyser/article.html#example_project

           

          注意:解析過大的HeapDump可能導(dǎo)致Eclipse拋出OutOfMemory的錯(cuò)誤。這時(shí)你需要手動(dòng)調(diào)整Eclipse的緩存大小,可以參考官網(wǎng)給出的處理方式(原文連接

           

          Alternatively, edit the MemoryAnalyzer.ini to contain:

          -vmargs
          -Xmx2g
          -XX:-UseGCOverheadLimit

          Eclipse插件版打不開的朋友可以試試 RPC版的MAT (我的232m的dump文件也打不開,難道非得用64bit的機(jī)器嗎?):RPC版MAT下載地址

           

          JProfile

           

          等等;

          轉(zhuǎn)自:http://jiangsha.iteye.com/blog/1576355

          posted on 2013-03-18 16:53 zhangxl 閱讀(20330) 評(píng)論(2)  編輯  收藏 所屬分類: 優(yōu)化


          FeedBack:
          # re: tomcat 產(chǎn)生heapdump文件配置
          2014-01-23 15:19 | tyler
          我分析heapdump用的機(jī)器是16G內(nèi)存的。有一次還不得不打開磁盤交換。分析heapdump比產(chǎn)生heapdump消耗的內(nèi)存更多。  回復(fù)  更多評(píng)論
            
          # re: tomcat 產(chǎn)生heapdump文件配置
          2016-01-18 22:29 | 小龍?jiān)诰€
          如果不內(nèi)存溢出,heapdump目錄是不是空的?  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2016年1月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿(1)

          隨筆分類(17)

          隨筆檔案(28)

          文章分類(30)

          文章檔案(30)

          相冊(cè)

          收藏夾(2)

          hibernate

          java基礎(chǔ)

          mysql

          xml

          關(guān)注

          壓力測(cè)試

          算法

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 96393
          • 排名 - 601

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 通江县| 肇源县| 珠海市| 巴东县| 梧州市| 黑山县| 景德镇市| 崇州市| 宁南县| 泾川县| 荔波县| 盐源县| 牙克石市| 同江市| 东光县| 关岭| 祁东县| 榆树市| 若尔盖县| 苏尼特右旗| 英超| 郧西县| 秦安县| 保山市| 平度市| 兴义市| 油尖旺区| 罗江县| 改则县| 廊坊市| 佛教| 长子县| 房山区| 综艺| 昌宁县| 神农架林区| 漯河市| 阳城县| 岳池县| 开化县| 图木舒克市|