锁定老帖子 主题:解决Tomcat应用的内存溢出问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-27
最后修改:2009-11-30
维护一个老系统,发现有java.lang.OutOfMemoryError: Java heap space的情况,内存溢出,以下是大致的解决过程: 1.安装JProfiler,并配置成监控本地的tomcat 2.修改catalina.bat,添加参数: set JAVA_OPTS= -Xms768m -Xmx1024m -verbose:gc -Xloggc:../logs/gclog.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+HeapDumpOnOutOfMemoryError %JAVA_OPTS% 3.使用JProfiler在Tomcat的bin目录下创建的启动脚本startup_jprofiler.bat重启tomcat 4.运行JProfiler观察内存状况,未发现问题 5.第二天突然发现Tomcat再次出现内存溢出,Tomcat的bin目录下自动生成了java_pid107932.hprof文件,将此文件下载到本地,以便分析。 6.下载Memory Analyzer工具,然后打开该hprof文件进行分析,发现是SmartUpload的问题:com.jspsmart.upload.Files占用内存1G多。 7.用Apache的上传组件替换掉smartupload,目前没有发现问题
附上Memory Analyzer分析的图片:
Leak Suspects显示,有一个东西占了1007.9M的内存:
点击底部的Details链接,发现是com.jspsmart.upload.Files占用内存最多:
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-11-28
没看到解决方案呀。只看到找到了问题
|
|
返回顶楼 | |
发表时间:2009-11-28
同意楼上,不过找到了问题所在,基本上完成了一半了
|
|
返回顶楼 | |
发表时间:2009-11-29
上传文件,应该结合硬盘空间来使用,否则很容易出现outofmemory,我认为增加JVM的内存空间虽然是个办法,但不是最好的solution。
|
|
返回顶楼 | |
发表时间:2009-11-29
是使用内存模式上传文件?
我猜想应该是,而且对上传文件做完处理后,没有及时删除文件。加上这个,应该就没问题了。 |
|
返回顶楼 | |
发表时间:2009-11-29
写IO的时候CLOSE没关?
|
|
返回顶楼 | |
发表时间:2009-11-30
在tomcat还在运行的时候监控内存,可以看出是哪个类、哪个线程内存溢出了,不用搞这么麻烦
|
|
返回顶楼 | |
发表时间:2009-11-30
最后修改:2009-11-30
我再使用ibatis 处理 大字段的时候上传 ,服务器使用tomcat,上传文件小的情况下不出问题,但是文件大了,报的也是这个异常,不知道各位有什么好的解决方法?
|
|
返回顶楼 | |
发表时间:2009-11-30
魔力猫咪 写道 没看到解决方案呀。只看到找到了问题
呵呵,解决方案就是替换掉smartupload,我使用的是使用Apache的上传组件 |
|
返回顶楼 | |
发表时间:2009-11-30
最后修改:2009-11-30
linzy410 写道 在tomcat还在运行的时候监控内存,可以看出是哪个类、哪个线程内存溢出了,不用搞这么麻烦
是的,一开始我也是用JProfiler监控,但当时估计是没有遇到用户上传文件,没有发现问题。第二天发现时tomcat已经down掉了,于是利用输出的文件查看了一下。。。 |
|
返回顶楼 | |