Tomcat5.5运行在win2003 server平台上,近期频繁出现tomcat意外当机现象,在hs_err_pidxxxx.log文件中,记录的都是因为Out of swap space现象导致的,下面是最近一次文件记录中的头信息部分及Heap使用的内容:#
# An unexpected error has been detected by Java Runtime Environment:
#
# java.lang.OutOfMemoryError: requested 48798720 bytes for jbyte in C:\BUILD_AREA\jdk6_02\hotspot\src\share\vm\prims\jni.cpp. Out of swap space?
#
# Internal Error (414C4C4F434154494F4E0E494E4C494E450E4850500017), pid=1428, tid=2492
#
# Java VM: Java HotSpot(TM) Client VM (1.6.0_02-b06 mixed mode)
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#Heap
def new generation total 72576K, used 54639K [0x02d70000, 0x07c30000, 0x07c30000)
eden space 64512K, 74% used [0x02d70000, 0x05c729e8, 0x06c70000)
from space 8064K, 80% used [0x07450000, 0x07aa9448, 0x07c30000)
to space 8064K, 0% used [0x06c70000, 0x06c70000, 0x07450000)
tenured generation total 967936K, used 781190K [0x07c30000, 0x42d70000, 0x42d70000)
the space 967936K, 80% used [0x07c30000, 0x37711bb8, 0x37711c00, 0x42d70000)
compacting perm gen total 40704K, used 40572K [0x42d70000, 0x45530000, 0x62d70000)
the space 40704K, 99% used [0x42d70000, 0x4550f340, 0x4550f400, 0x45530000)
No shared spaces configured.用jconsole看了事发前后的vm摘要,交换空间总量为4G,可用交换空间为3G左右,没有大的变化。
想请问各位,这里的提到的swap space是不是就是指的是交换空间,它的设置是不是指设定的虚拟内存空间(我在机器的c盘设置了4G,且该盘有足够的剩余空间),如不是的话,该如何设置以解决out of swap space现象。另外在Heap信息中给出的No shared spaces configured这里又有什么提示,是不是跟问题的现象也有什么关系,拜托各位能提供些有用的信息了!
# An unexpected error has been detected by Java Runtime Environment:
#
# java.lang.OutOfMemoryError: requested 48798720 bytes for jbyte in C:\BUILD_AREA\jdk6_02\hotspot\src\share\vm\prims\jni.cpp. Out of swap space?
#
# Internal Error (414C4C4F434154494F4E0E494E4C494E450E4850500017), pid=1428, tid=2492
#
# Java VM: Java HotSpot(TM) Client VM (1.6.0_02-b06 mixed mode)
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#Heap
def new generation total 72576K, used 54639K [0x02d70000, 0x07c30000, 0x07c30000)
eden space 64512K, 74% used [0x02d70000, 0x05c729e8, 0x06c70000)
from space 8064K, 80% used [0x07450000, 0x07aa9448, 0x07c30000)
to space 8064K, 0% used [0x06c70000, 0x06c70000, 0x07450000)
tenured generation total 967936K, used 781190K [0x07c30000, 0x42d70000, 0x42d70000)
the space 967936K, 80% used [0x07c30000, 0x37711bb8, 0x37711c00, 0x42d70000)
compacting perm gen total 40704K, used 40572K [0x42d70000, 0x45530000, 0x62d70000)
the space 40704K, 99% used [0x42d70000, 0x4550f340, 0x4550f400, 0x45530000)
No shared spaces configured.用jconsole看了事发前后的vm摘要,交换空间总量为4G,可用交换空间为3G左右,没有大的变化。
想请问各位,这里的提到的swap space是不是就是指的是交换空间,它的设置是不是指设定的虚拟内存空间(我在机器的c盘设置了4G,且该盘有足够的剩余空间),如不是的话,该如何设置以解决out of swap space现象。另外在Heap信息中给出的No shared spaces configured这里又有什么提示,是不是跟问题的现象也有什么关系,拜托各位能提供些有用的信息了!
解决方案 »
- 帮下我,谢谢了,郁闷了一晚上。
- 如何用 setIconImage方法!
- 看看那个地方的错误~~~~
- jxl:导出Excel时的问题?
- java swing窗体问题
- 内部类 页面无法访问其属性
- process = Runtime.getRuntime().exec( "cmd /c set user" );//cmd后面这个 /c 代表什么意思?
- 高手们,帮我看下改下APPLET,多谢
- 算法的问题!
- 从方法返回数组时候出错;missing return statement
- 关于线程运行几次后内存上升问题,请各位达人相帮
- JAVA面试题解惑系列(四)——final、finally和finalize的区别
楼主【pork】截止到2008-07-24 11:03:10的历史汇总数据(不包括此帖):
发帖的总数量:11 发帖的总分数:440 每贴平均分数:40
回帖的总数量:13 得分贴总数量:1 回帖的得分率:7%
结贴的总数量:11 结贴的总分数:440
无满意结贴数:3 无满意结贴分:150
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:27.27 % 无满意结分率:34.09 %
敬礼!
WINDOWS VISTA操作系统,内存2G,用的MyEclipse6.0 # An unexpected error has been detected by Java Runtime Environment:
#
# java.lang.OutOfMemoryError: requested 41943040 bytes for GrET in C:\BUILD_AREA\jdk6\hotspot\src\share\vm\utilities\growableArray.cpp. Out of swap space?
#
# Internal Error (414C4C4F434154494F4E0E494E4C494E450E4850500017), pid=4472, tid=4848
#
# Java VM: Java HotSpot(TM) Client VM (1.6.0-rc-b66 mixed mode)
# An error report file with more information is saved as hs_err_pid4472.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
问题点数:50 回复次数:6 显示所有回复显示星级回复显示楼主回复 修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
healer_kx
甘草
等级:
发表于:2008-03-11 13:42:321楼 得分:13
好像是说pagefile.sys这个文件都不够的意思了,你这个哪是内存不够了,估计是连硬盘都不够了。多大的数据量啊?
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
Aniao
阿鸟
等级:
发表于:2008-03-11 14:38:512楼 得分:0
.....我怎么没有看到pagefile.sys这几个字,我的Eclipse和jre和jvm所在的E盘的剩余空间还有5个G呢....
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
nihuajie05
陆烨辰
等级:
发表于:2008-03-11 15:33:453楼 得分:13
没有遇到过
不过同LS,问甘草哪来的pagefile.sys字段
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
healer_kx
甘草
等级:
发表于:2008-03-11 15:34:594楼 得分:0
是Windows上的虚拟内存啊,就是Linux所谓的交换分区。
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
java2000_net
老紫竹 失业中.... 有合适的北京天津工作联系我
等级:
发表于:2008-03-12 06:49:545楼 得分:12
恩! 先调整一下机器的虚拟内存看看吧!
在我的电脑,右键,属性,高级里面吧! 看看你的虚拟内存是不是太少了! 还有,你可以启动jconsole监控一下你的程序的内存使用情况,这个工具是JDK自带的。
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
bobor_2008
@_@
等级:
发表于:2008-03-12 14:35:576楼 得分:12
你用的是Eclipse开发的吧. 我估计是Eclipse的漏洞,我在作项目的时候也多次遇到这种问题(我的的内存和虚拟内存都可以). 我的解决方法是,保存所编辑的文件.
重启Eclipse,此方法自感笨拙,但也没有找出更好的方法.
请提供有价值的信息,谢谢!
解决方法:
windows 更改系统环境变量
加上JAVA_OPTS=-Xms64m -Xmx512m
Linux 在{tomcat_home}/bin/catalina.sh的前面,加
set JAVA_OPTS='-Xms64 -Xmx512' 我的是linux系统所以用了第二种方法.如果你的是windows系统除了修改环境变量外,应该也可以修改catalina.bat 加上JAVA_OPTS=-Xms64m -Xmx512m
也可以启动config tomcat程序,在配置窗口中打开java标签页,下面有Initial memory pool 及 max memory pool 等选项,你把值调得足够大,应该就OK了.最后,如果是elcipse开发环境下有这个问题,也可以设置eclipse下tomcat的运行参数
----swap不足的时候,unix下系统内存分配会失败,但是如果你上面确定swap设置并且运行时候是OK的,这个应该不成立。所以还有一个可能就是你的tomcat/eclipse启动时候限制了堆的大小,如果大于256M,就申请不到内存了。如果先前没有指定,JAVA会有一个缺省的,多少我忘记了,反正是不大(好像是64吧),所以我认为和你的SWAP的设置没有关系。用jconsole看了事发前后的vm摘要,交换空间总量为4G,可用交换空间为3G左右,没有大的变化。
想请问各位,这里的提到的swap space是不是就是指的是交换空间,它的设置是不是指设定的虚拟内存空间(我在机器的c盘设置了4G,且该盘有足够的剩余空间),
----是的。windows下就是虚拟内存;unix是交换区。如不是的话,该如何设置以解决out of swap space现象。另外在Heap信息中给出的No shared spaces configured这里又有什么提示,是不是跟问题的现象也有什么关系,拜托各位能提供些有用的信息了!
----您看看程序启动时候哪里可以设置xmx,设置大一点。
----No shared spaces configured 是JVM里面的一个函数打出来的,我贴出来你看看:
void CompactingPermGenGen::print_on(outputStream* st) const {
OneContigSpaceCardGeneration::print_on(st);
if (spec()->enable_shared_spaces()) {
st->print(" ro");
ro_space()->print_on(st);
st->print(" rw");
rw_space()->print_on(st);
} else {
st->print_cr("No shared spaces configured."); ----就是这里,在内存分配失败后打印的,这里没有太大指导意义。
}
}
我给系统盘(otmcat也在这下面)分了15G空间
还有一个就是参考一下JDK的开源实现,我记得先前研究的时候,image的处理使用了弱引用类,可以降低此类问题出现的频率。
如果真是GC线程优先级执行的问题,导致GC无法正常回收,你认为最可能的原因是什么;针对处理image的应用,应该如何保证GC的有效运行(不能太频繁而影响性能)?
另外在处理image时cpu和memory的变化幅度确实很大,你提到的image的弱引用类,可否做出进一步描述?
谢谢!此外还想了解一下,作为swap space,它在什么情况下会与内存的Heap space用何方式进行交互的,交互的关系何结果又如何?
谢谢!
现在主要想了解我在上面提到的问题,谢谢!
如果真是GC线程优先级执行的问题,导致GC无法正常回收,你认为最可能的原因是什么;针对处理image的应用,应该如何保证GC的有效运行(不能太频繁而影响性能)?
另外在处理image时cpu和memory的变化幅度确实很大,你提到的image的弱引用类,可否做出进一步描述?
谢谢!
---我本地的环境已经没有了;以前遇到过;当时的问题现象就是outofmemory;定位缺陷的时候,发现内存是够的,硬盘也是够的;最后定位出来是对象的new和销毁太频繁了;原因就是GC在系统繁忙的时候,GC不过来,瞬时间导致问题出现.
---解决的办法很简单(定位过程比较难,绕了很多弯),就是把对象尽量重用,而不是delete(JAVA里面没有这个东东,我的意思你明白就可以了),避免太频繁的创建和销毁对象.
---image的处理方式我建议你首先按照我上面说的思路试试,然后再研究一下WeakReference,他在JDK的源代码有使用的.但是这个问题的解决是否有帮助难说.建议你上网查查这块的资料,然后再看看JDK的源代码,都有说明.
此外还想了解一下,作为swap space,它在什么情况下会与内存的Heap space用何方式进行交互的,交互的关系何结果又如何?
谢谢!
--unix有单独的命令把swap额外增加到一个文件中,如果内存不够的时候,就会使用这个额外的毕竟这个东东在硬盘上,是虚拟的;和OS本身的MMU是本质的区别.具体交互的过程和细节我没有研究过,你可以找一下这方面的材料 http://baike.baidu.com/view/418446.htm
对你谈到的前部分内容,我表示赞同,因为做的是图片处理的应用,在这些方面都有重视,特别是频繁的GC带来的性能问题也都有注意,另外你谈到的弱引用我也会去做进一步的了解。
我想在这方面的改进优化是不断进行的,但效果也不是能立刻观察到的,jvm频频出现C:\BUILD_AREA\jdk6_02\hotspot\src\share\vm\prims\jni.cpp. Out of swap space现象,可有哪位具体见过,可有其它解决之道,尽快恢复服务正常运行
如果是在eclipse 运行,可以在 选项里面设置 jvm堆的大小
如果在dos下运行的 话不妨这样 java -Xmx256M -Xms256M XXXX.jar
按照maquan的分析,先头对swap space的理解可能方向偏离了,请问maquan,在1.6.0下,我应该在何处找到你所分析的文件呢(如java.cpp,allocation.hpp等)?
再者,日志中出现的java.lang.OutOfMemoryError: requested 48798720(194400000这个数值在这两天出现了7、8次) bytes ......,你认为这样的请求是线程的原始请求内存大小,还是native化处理后请求的内存?你谈到的“AllocateHeap() 已经无法满足请求”,请问这里面有没有什么限制,谢谢!
#
# An unexpected error has been detected by Java Runtime Environment:
#
# java.lang.OutOfMemoryError: requested 1024000 bytes for GrET in C:\BUILD_AREA\jdk6_05\hotspot\src\share\vm\utilities\growableArray.cpp. Out of swap space?
#
# Internal Error (allocation.inline.hpp:42), pid=18232, tid=14500
# Error: GrET in C:\BUILD_AREA\jdk6_05\hotspot\src\share\vm\utilities\growableArray.cpp
请问你后来是如何解决的?
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# SIGSEGV (0xb) at pc=0x004f0de6, pid=32674, tid=1044749232
#
# Java VM: Java HotSpot(TM) Server VM (1.5.0_08-b03 mixed mode)
# Problematic frame:
# C [libc.so.6+0x68de6] strcpy+0x26
#
# An error report file with more information is saved as hs_err_pid32674.log
!>_<
#
# java.lang.OutOfMemoryError: requested 511248 bytes for Chunk::new. Out of swap space?
#
# Internal Error (allocation.cpp:215), pid=4480, tid=1867205520
# Error: Chunk::new
#
# JRE version: 6.0_14-b08
# Java VM: Java HotSpot(TM) Server VM (14.0-b16 mixed mode linux-x86 )
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#