java.lang.OutOfMemoryError: Java heap space

来源:互联网 发布:网络信息资料 编辑:程序博客网 时间:2024/06/10 07:44

JVM: Java HotSpot(TM) Client VM (1.5.0_15-b04, mixed mode, sharing)

operating-system:GNU/Linux(uname -o)

 

问题描述:

一个java小程序,运行一段时间总是会莫名其妙的down掉,有时运行1天后down掉,有时运行5分钟后down掉,并且程序日志没有任何异常

 

问题分析:

查看了一下nohup.out

java.lang.OutOfMemoryError: Java heap space

用visualvm查看了一下heap的使用情况

 

然后进程就down掉了,应该是堆内存不够导致程序挂掉

为什么jvm不带参数运行时堆内存只有60多m?网上说默认堆内存为物理内存的1/64

[123@123 ~]$ free -m             total       used       free     shared    buffers     cachedMem:          2023       1961         61          0          7        908-/+ buffers/cache:       1045        977Swap:         4063        655       3408

计算下来也不应该是60多m,这块还要研究一下

 

解决方式:

./java -Xmn100m -Xms400m -Xmx400m ...

然后再观察heap的使用情况

看到heap的使用峰值为200m左右,60多m的heap确实不够用

在运行java程序时一定要带上内存配置

 

备注:

Xmn设置年轻代大小(整个JVM内存大小=年轻代大小+年老代大小+持久代大小。java垃圾回收是基于代的,故该配置会影响垃圾回收的执行。Sun官方推荐配置为整个堆的3/8。)

Xms设置jvm初始堆内存

Xmx设置jvm最大堆内存

将Xms和Xmx设置为一样的大小即可避免堆自动扩展

 

原创粉丝点击