最近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的错误应该怎么解决呢?

解决方案 »

  1.   

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

  2.   

    机器的物理内存是4G,tomcat配置为-Xms1024m -Xmx2560m
    我用top命令看了一下,宕机的时候,Java使用的内存实际都不到400M,所以很是奇怪。
      

  3.   

    一般的情况下是不会出现缓存溢出的,对了,你配置一下你的tomcat
     在catalina.sh 加上
     JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "如果还是出现的话,那你好好查你的程序,是不是那边错了,不然会缓存溢出的,举个很简单的例子,分页程序没写好,在数据量很大的时候,一下子把所有对象全部查出来。
      

  4.   

    做一个heapdump查查原因,windows下好像是用ctrl+break,unix风格的os用kill -3 <pid>
      

  5.   

    1 增加你的内存配置,现在内存很便宜2 增加你的操作系统的交换空间。我觉得不是内存、和交换空间的问题,报错的时候 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?
    只是申请了250KB的交换空间,况且才用了400MB的内存。
    问题研究中。。