很多tomcat進程退出(或者進程假死),都是由於頻繁的拋出OutOfMemeoryError導致的。
為了讓tomcat退出前或者發生OutOfMemeoryError時自動dump堆棧信息,方便事后排查問題,我們可以做如下操作:
1、 在tomcat啟動參數中加入兩個參數 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/home/tomcat/domains/server2/oom.hprof
2、 重啟tomcat
參數說明
(1)-XX:+HeapDumpOnOutOfMemoryError 表示當JVM發生OOM時,自動生成DUMP文件。
(2)-XX:HeapDumpPath=存儲文件/目錄 表示生成DUMP文件的路徑
//*********************************** 完美分割線 *********************************************//
-XX:+HeapDumpOnOutOfMemoryError
該配置會把快照保存在user.dir中,比如你用tomcat啟動,那應該是在tomcat的bin目錄下
當然,也可以通過XX:HeapDumpPath=./java_pid.hprof來顯示指定路徑
此外,OnOutOfMemoryError參數允許用戶指定當出現oom時,指定某個腳本來完成一些動作,比如郵件知會。。。
$ java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof -XX:OnOutOfMemoryError ="sh ~/cleanup.sh" MyApp
