JAVA:Tomcat服务执行批量数据处理时出现Java.lang.OutOfMemoryError: Java heap space解决方法

8 篇文章 0 订阅

问题

在Tomcat服务中,有一段JAVA程序执行导入excel文件,里面有20+万条数据,读取过程中出现报错提示“Java.lang.OutOfMemoryError: Java heap space”。

意思就是JVM堆内存空间不足,原因应该是遍历过大数据量加载到对象实例中,导致JAVA虚拟机的内存溢出了。

解决方案

注意:解决方案有两种,分别对应Tomcat的两种启动方式。

因为这两种启动所使用的Java内存环境配置是不同的,本人推荐方案二。

方案一 适用于cmd执行startup.bat命令启动Tomcat的方式。

方案二 适用于已经把Tomcat安装到windows系统服务的方式。

设置完后记得要重启tomcat才会生效。然后可以用java的cmd命令jmap来查询JVM堆内存是否已生效。

jmap - heap 线程PID  

线程PID :可以从任务管理器中查询Tomcat运行的线程PID。

 

方案一

1.修改JVM的内存配置参数

在Tomcat目录下的/bin/catalina.bat最前面加入:

set JAVA_OPTS=-Xms800m -Xmx800m

或者在 echo Using CATALINA_BASE:   "%CATALINA_BASE%"的下一行添加以下内容(其实在文件最前面或最后面添加都可以,放这里比较合适)

set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m

添加后如图:

2. 执行startup.bat重新启动Tomcat

只有startup.bat启动tomcat,设置才能生效,如果在windows的系统服务启动tomcat服务, set JAVA_OPTS 不会起作用。

这点非常重要,网上都有介绍修改JVM的内存配置参数,但很多人是把tomcat安装到windows系统服务,重启后发现没有生效就是这个原因。

方案二

1.修改JVM的内存配置参数

在Tomcat的bin/目录下找到tomcat8w.exe,如果你运行后报错:“指定的服务未安装Unable to open the Service 'tomcat8'”,请到系统服务列表中确定的你安装的tomcat的服务名是否是“tomcat8”,如是"mytomcat",就把这个tomcat8w.exe复制一份并重命名为"mytomcat.exe",双击运行即可正常打开。在JAVA标签页面中修改初始内存为256M,最大内存为1024M,确定后退出。

后记:执行tomcat8w.exe一直报错,后来看到一个网友的回答才知道程序名要与服务名一致,所以想到直接重命名程序名的方式,果然可以正常执行了。

 2.在系统服务列表重启Tomcat服务。

以上两种方案修改过JVM虚拟机内存后,程序执行正常了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值