查看服务器日志时候看到报错信息
java.lang.OutOfMemoryError: Java heap space
个人分析:出现原因有2种
一.程序中出现了死循环(大量资源占用)
二.程序占用内存太多,超过了JVM堆设置的最大值
原因1的解决方案为:查看自己代码找到出现问题的地方进行资源释放或者更改(需要对代码熟悉可以根据原因2的解决办法查看是什么类导致的)
原因2的解决办法:查看该项目的GC快照,给出合理的堆分配值
(1)下载visualvm的zip包,解压在本地用于查看linux服务器的dump文件
(2)在服务器报错Java heap space后,通过jdk的jmap -dump命令获取该项目的dump文件
在linux运行命令
jmap -dump:file=[文件名] [pid]
在该目录下找到[文件名].dump文件下载到本地
(3)打开visualvm的bin目录下的visualvm.exe,点击工具(tools)然后找到插件Visual GC插件进行安装
然后重新打开导入文件进行GC分析
查看分析结果然后解决问题(找到对应出现问题的地方进行记录查看分析)
代码解决思路:
1.考虑是不是代码导致一个对象存入的数据太多
2.考虑是否分配空间存在问题
3.考虑是否new的对象太多导致老年代过多
注意:设置默认的jvm最大值可以使用命令 java -XmxXXXXM -version 测试是否可用,然后逐渐的增大XXXX的值,如果执行正常就表示指定的内存大小可用,否则会打印错误信息。
JVM初始分配的内存由-Xms指定 ,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定 ,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。JVM使用-XX:PermSize设置非堆内存初始值 ,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小 ,默认是物理内存的1/4。
可以根据自己项目的内存占用给出合理的配置。



