日期:2014-05-18  浏览次数:20782 次

使用工具检测OutOfMemoryError的问题,发现 Out of swap space,咋回事呢?
最近Tomcat老是宕机,平均2-3小时就会出现一次,每次的原因都说是OutOfMemoryError,也没有其他的提示,环境是linux+tomcat5.0.28+jdk1.4.2,我用JProfiler检测了一下,两次宕机都有这样的日志:

第一次:Exception java.lang.OutOfMemoryError: requested 2048000 bytes for GrET* in /export/jdk142-update/ws/fcs/hotspot/src/share/vm/utilities/growableArray.cpp. Out of swap space?

第二次:Exception in thread "TP-Processor31" java.lang.OutOfMemoryError: requested 10488 bytes for oop in /export/jdk142-update/ws/fcs/hotspot/src/share/vm/memory/systemDictionary.cpp. Out of swap space

没使用JProfiler时没出现过这些,不知道是因为JProfiler分析出来OutOfMemoryError的原因了,还是因为使用JProfiler工具本身带来的问题,对于这种Out of swap space的错误应该怎么解决呢?

------解决方案--------------------
OutOfMemoryError的话如果程序本身没有问题,那就要追加tomcat启动时的heap size了。
如果物理内存不够就考虑加内存吧


------解决方案--------------------
一般的情况下是不会出现缓存溢出的,对了,你配置一下你的tomcat
 在catalina.sh 加上
 JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "

如果还是出现的话,那你好好查你的程序,是不是那边错了,不然会缓存溢出的,举个很简单的例子,分页程序没写好,在数据量很大的时候,一下子把所有对象全部查出来。




------解决方案--------------------
1 增加你的内存配置,现在内存很便宜

2 增加你的操作系统的交换空间。
------解决方案--------------------
做一个heapdump查查原因,windows下好像是用ctrl+break,unix风格的os用kill -3 <pid>