java内存溢出分析

跑线上项目的时候,由于工程师的疏忽,经常会出现oom,一周就能跑满8g内存,很恐怖。java的gc机制很棒,但是再完美也有不足。关于java内存管理和gc机制网上有很多文章,这里就不多说。 
jvisualvm安上插件之后也可以进行分析,但是对于稍大的web应用程序来说打印log,后期分析才是明智之举。

Windows下:   

windows下进行堆栈分析比较简单:只需要在eclipse里添加一个插件    地址:http://download.eclipse.org/mat/1.1/update-site/ 

安装后:工具栏多了连个选项,选择第一个(locally running)VM,找到要分析的项目。

报表都出来了,很简单很轻松。点击Reports里面的Leak Suspects ,报表就在这里。看到报表里的问题,接下来就看你对代码的熟悉度了,找到问题,干掉它。这个报表里的东西太多了,也都很有用。

Linux:   

 自己做的小项目可以在windows下分析分析。但是线上项目都会在linux服务器上跑。这个就需要打印日志,也就是dump文件。将文件拷贝到windows下面,在用分析工具进行分析,其实就是多了一个配置jvm过程和打印日志过程:如果用的是tomcat:1.打开/tomcat_home/bin/catalina.sh文件 2.加上:JAVA_OPTS="$JAVA_OPTS -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\heapdump"

如果是resin:在/resin/bin/httpd.sh里添加: 其中-Xms,-Xmm,-Xmn等等根据项目大小配置大小,    args="-Dfile.encoding=UTF-8 -J-server -Xms8000M -Xmx8000M -Xmn5000M -J-Xss256K -J-XX:ThreadStackSize=256 -J-XX:StackShadowPages=8 -J-verbosegc -J-XX:+PrintGCDetails -J-XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError -XX:PermSize=128m -XX:MaxPermSize=128m -XX:+UseParallelGC -Djava.library.path=/data/web/resin/libexec:/opt/j2sdk/lib:/usr/lib64 -Djmagick.systemclassloader=false"会生成一个heapDump文件,将它拷贝出来,在本地用eclipse的分析工具进行分析。
在做比较大的dump文件分析的时候,需要的内存很大。10G的dump文件至少要给eclipse的-Xms和-Xmx配置5g的内存,要不eclipse就会内存溢出。

想深入了解的可以看:http://blog.sina.com.cn/s/blog_56d8ea9001018h8z.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值