java.lang.OutOfMemoryError: Java heap space

tomcat:java.lang.OutOfMemoryError: Java heap space

问题环境描述

系统所使用的的环境配置是jdk1.8+tomcat8+oracle11g,每次把系统发布到服务器上后,运行大约3天后系统就会出现内存溢出的问题,导致某一个功能点不能正常使用,之前每次的解决方法都是重启tomcat服务器,但这并不是长久之计。不仅自己不方便,也为使用方带来不方便 。

问题分析

从网上寻找各种相关的解决方案,能引起这种问题发生的原因大致分为三个:
1、写的代码不行,存在bug,存在死循环
2、或者创建的对象太多,但并没有得到释放,在进行垃圾回收之前,虚拟机分配的堆内存空间已经满了。
3、tomcat设置的运行内存、堆大小需要调整到更大

系统功能点性能测试

利用了多种测试工具来测试
1、jmeter 用来测试程序并发,发现直接测试在idea中运行的系统,并发是没有问题,但一旦发布到tomcat下面,,就会error
2、jvisualvm,该工具位于jdk安装目录下bin目录下,是jdk自带分析工具,经过一通分析,好像是string int类型占内存比较多,但对于更改程序,感觉没多大用,也可能是我看不懂。。。
3、JProfiler 用来分析并发时程序中各文件运行中内存占比,测试最大运行内存,发现最大运行内存大约980MB。。。
4、尝试优化程序,发现应该不是死循环;也没重复创建对象,优化无果。
5、调整tomcat,可以了。。。,但调整的方式有点坑

解决方案

我的tomcat是安装版,需要调整的是在tomcat8w.exe中调整 ,如下图:
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
调整这个地方的参数,重启tomcat,才会生效,重启后可查看tomcat运行日志,查看配置的参数大小。
java.lang.OutOfMemoryError: Java heap space

结果

目前来看确实 是好了很多,终于不会有人三天两头的因为这个问题来找我了。。。还得持续跟进,看看效果!!!

参考链接:
【1】https://www.imooc.com/article/13518
【2】https://blog.csdn.net/lyflyyvip/article/details/82288719