java中OutOfMemoryError的诊断以及Eclipse Memory Analyzer

来源:互联网 发布:国内怎么看netflix知乎 编辑:程序博客网 时间:2024/05/21 11:55

       前几天看见一篇文章关于我们的jvm报的OutOfMemoryError错误,今天我们来看看这个错误,以及介绍一个插件来诊断产生这个问题的具体漏洞在哪里

OutOfMemoryError错误常见的错误提示:

  1. tomcat:java.lang.OutOfMemoryError: PermGen space
  2. tomcat:java.lang.OutOfMemoryError: Java heap space
  3. weblogic:Root cause of ServletException java.lang.OutOfMemoryError
  4. resin:java.lang.OutOfMemoryError
  5. java:java.lang.OutOfMemoryError

遇到这种问题,大部分人去百度,网上就是增加堆的大小,具体有如下几个方法增加:

1、通过myeclipse工具,如图

http://dl2.iteye.com/upload/attachment/0108/2085/5909a9e2-a92f-3840-b0b1-8002e5f493b7.jpg


2、没有myeclipse工具直接通过tomcat服务器

 一、手动设置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.bat(windows系统)或者catalina.sh(unix系统)在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=256M -XX:MaxPermSize=512m

这里要注意一点,如果通过myeclipse启动的,那么在第二种设置时是没有用的,相反也一样。

还有一点之前有些网址说在eclipse.ini中加,配置eclipse.ini只是配置了eclipse运行时的jvm堆内存(eclispe是一个java程序)。


以上就是一些办法,但我们今天就为了分析这个问题具体在哪些代码产生的,今天来一个分析的工具,以及一些jvm脚本

  • -Xloggc:gc.log

  • 在每次垃圾收集时打印堆内存以及垃圾收集的信息
  •  -XX:+PrintGCDetails

  • 打印更多的关于垃圾收集的信息。
  • -XX:+PrintGCTimeStamps

  • 打印从HotSpot 虚拟机开始执行直至垃圾收集事件发生所花费的时间(以秒为单位)
  • -XX:+HeapDumpOnOutOfMemoryError

    • 系统会生成堆内存转储文件



上面几个脚本的意思也有说明,之后就是加上这些脚本。加的方式也有两种

第一种:运行application 如图



按run,之后刷新项目,这时候发现多了两个文件,如图

第一个文件是gc垃圾回收的日志文件,第二个是出现堆错误的时候出现的


第二种:web 项目

   web项目的设置我就不讲了,本文章一开始就讲过了,也有两种方式。


上诉的操作之前先安装一个插件,叫 Eclise内存分析器(Eclipse Memory Analyzer)

具体怎么安装看网上资料,我这里不多提了,安装成功的如图

这个有什么用呢,主要去看之前我们生产的.hprof文件,用这个工具去分析。安装成功这个插件后,直接双击.hprof文件,如图显示

上图可以看出具体出现OutOfMemoryError的原因了。具体这个插件怎么用,大家也可以去网上查,我只是用了其中很小的一部分

参考网址

http://www.cnblogs.com/dennyzhangdd/p/5647469.html

http://blog.sina.com.cn/s/blog_8655dfc30101ga0a.html

1 0
原创粉丝点击