解决Tomcat应用的内存溢出问题

维护一个老系统,发现有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的内存:

解决Tomcat应用的内存溢出问题_第1张图片

 

 

 点击底部的Details链接,发现是com.jspsmart.upload.Files占用内存最多:

解决Tomcat应用的内存溢出问题_第2张图片

 

 

你可能感兴趣的:(多线程,tomcat,应用服务器,ibatis,脚本)