posts - 28,  comments - 15,  trackbacks - 0

           

          系統有時會遇到OutOfMemoryError,Java堆溢出了。我們需要找到造成OutOfMemoryError原因。一般有兩種情況:

          1、內存泄露,對象已經死了,無法通過垃圾收集器進行自動回收;

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


          想在泄漏未發生前,取堆轉儲文件分析, 通過jvm參數-XX:+HeapDumpOnOutOfMemoryError(XX:+HeapDumpOnCtrlBreak不知道為什么tomcat啟動不了)可以讓JVM在出現內存溢出是Dump出當前的內存轉儲快照。

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

           

          在tomcat中設置jvm參數

          linux系統中

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

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

          如下圖位置:

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

          Windows系統中

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

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

          如下圖位置:

           

          分析dump出來的內存快照文件


          可以使用分析工具進行分析,如:

           

          Eclipse的MAT

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

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

           

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

           

          Alternatively, edit the MemoryAnalyzer.ini to contain:

          -vmargs
          -Xmx2g
          -XX:-UseGCOverheadLimit

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

           

          JProfile

           

          等等;

          轉自:http://jiangsha.iteye.com/blog/1576355

          posted on 2013-03-18 16:53 zhangxl 閱讀(20329) 評論(2)  編輯  收藏 所屬分類: 優化


          FeedBack:
          # re: tomcat 產生heapdump文件配置
          2014-01-23 15:19 | tyler
          我分析heapdump用的機器是16G內存的。有一次還不得不打開磁盤交換。分析heapdump比產生heapdump消耗的內存更多。  回復  更多評論
            
          # re: tomcat 產生heapdump文件配置
          2016-01-18 22:29 | 小龍在線
          如果不內存溢出,heapdump目錄是不是空的?  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類(17)

          隨筆檔案(28)

          文章分類(30)

          文章檔案(30)

          相冊

          收藏夾(2)

          hibernate

          java基礎

          mysql

          xml

          關注

          壓力測試

          算法

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 96363
          • 排名 - 601

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 康平县| 巫山县| 怀来县| 寿光市| 山丹县| 武安市| 北安市| 凭祥市| 呼图壁县| 夏津县| 大丰市| 龙江县| 苗栗市| 隆尧县| 寻甸| 得荣县| 安溪县| 明溪县| 吴忠市| 临清市| 城固县| 祁阳县| 渭源县| 舟山市| 海晏县| 普陀区| 凌云县| 高碑店市| 九龙县| 夏河县| 吕梁市| 普陀区| 桃源县| 邢台县| 垣曲县| 娄烦县| 科技| 阿拉善右旗| 西城区| 鄂温| 靖西县|