现在的位置: 首页 > 综合 > 正文

java.lang.OutOfMemoryError: Java heap space

2013年01月12日 ⁄ 综合 ⁄ 共 698字 ⁄ 字号 评论关闭

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     cached
Mem:          2023       1961         61          0          7        908
-/+ buffers/cache:       1045        977
Swap:         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设置为一样的大小即可避免堆自动扩展

 

抱歉!评论已关闭.