下午出现此异常,查阅官网得知产生 java.lang.OutOfMemoryError: Java heap space
错误的原因, 很多时候, 就类似于将 XXL 号的对象,往 S 号的 Java heap space 里面塞。其实清楚了原因, 就很容易解决对不对? 只要增加堆内存的大小, 程序就能正常运行. 另外还有一些比较复杂的情况, 主要是由代码问题导致的:
-
超出预期的访问量/数据量。 应用系统设计时,一般是有 “容量” 定义的, 部署这么多机器, 用来处理一定量的数据/业务。 如果访问量突然飙升, 超过预期的阈值, 类似于时间坐标系中针尖形状的图谱, 那么在峰值所在的时间段, 程序很可能就会卡死、并触发 java.lang.OutOfMemoryError: Java heap space 错误。
-
内存泄露(Memory leak). 这也是一种经常出现的情形。由于代码中的某些错误, 导致系统占用的内存越来越多. 如果某个方法/某段代码存在内存泄漏的, 每执行一次, 就会(有更多的垃圾对象)占用更多的内存. 随着运行时间的推移, 泄漏的对象耗光了堆中的所有内存, 那么 java.lang.OutOfMemoryError: Java heap space 错误就爆发了。
于是我设置了tomcat内存试试,问题就解决了。如下:
linux:
bin/catalina.sh文件的第一行增加
JAVA_OPTS='-server -Xms2048m -Xmx3072m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:NewSize=128m -XX:MaxNewSize=256m'
windows:
bin/catalina.bat文件的第一行增加
set "JAVA_OPTS=-server -Xms2048m -Xmx3072m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:NewSize=128m -XX:MaxNewSize=256m"
另外,指定JDK
set "JAVA_HOME=D:\Program Files\Java\jdk1.8.0_60"