记录一下最近遇到的一个JVM堆内存的问题
最近有一个需求,后台将几张图片和部分用户信息整合在一起,最终合成一张图片。
代码思路
为了保证图片清晰,我选择把所有的图片和用户信息都“压”在一张白板背景上(这里也试过其他方案,比如先导出为word在转图片,或者pdf转图片等,都有一个问题就是失真,内部的图片会很模糊)
1、开发环境: JDK1.8u211、tomcat8.6.5,maven3.6.2
2、开发工具: IDEA2022.3
3、问题经过: 在开发的时候是一步一测试的,没有任何问题。当部署到tomcat上时,批量导出的时候就会卡主不动,看了日志发现了一个异常 java.lang.OutOfMemoryError: Java heap space (Jvm堆空间),在这个问题上浪费了很多时间(幸亏需求不急),最后总结了几个解决方案
一、 优化代码,也是最合适的方案,不过这个需要对Jvm gc有深层次的理解,一般像我这样的小码农是适用不了了。
二、修改Xms和Xmx的空间,有两种方式:
1、在注册表中修改,HKEY_LOCAL_MACHINE > SOFTWARE > WOW6432Node > Apache Software Foundation > Procrun 2.0 > 你的tomcat > Parametes > java ,然后修改xms和xmx即可(根据你机器的内存自行修改,不可以超过最大内存)。
如下图:
2、找到你tomcat > bin > catalina.bat 选择编辑,在第二行加上
set JAVA_OPTS=-server -Xms512m -Xmx1024m -XX:PermSize=512M -XX:MaxPermSize=1024M
本人是工作两年的新人,遇到不常见的问题也只是大海捞针式的在网络上找方法,以上方案参考 https://blog.csdn.net/weixin_45816407/article/details/127456118