栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

记录一次java.lang.OutOfMemoryError: Java heap space处理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

记录一次java.lang.OutOfMemoryError: Java heap space处理

查看服务器日志时候看到报错信息

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。

可以根据自己项目的内存占用给出合理的配置。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862183.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号