您的位置:程序门 -> linux/unix社区 -> 系统维护与使用区



(悬赏1000分)java.lang.outofmemoryerror(hp-unix高手请进)


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


(悬赏1000分)java.lang.outofmemoryerror(hp-unix高手请进)
发表于:2007-10-12 10:58:40 楼主
目前有报:  
exception   in   thread   "compilerthread0"   java.lang.outofmemoryerror:   requested  
32756   bytes   for   chunkpool::allocate.   out   of   swap   space?  
possible   causes:  
        -   not   enough   swap   space   left,   or  
        -   kernel   parameter   maxdsiz   is   very   small.  

---------------------------------------------------------------------------------------------  
经过检查,swap还大把的有。  
maxdsiz     设置为2147483648  
swapmem_on   也设置为1的。  
---------------------------------------------------------------------------------------------  
    xx   xxswap   space:                                                                                                               xx   x      
    xx   xx     avail:                                   16384   mb                                                                   xx   x      
    xx   xx     used:                                     1798   mb                                          

---------------------------------------------------------------------------------------------  
  出问题前内存还有大把的空闲。  
system:   app                                                                                     wed   oct   10   14:34:22   2007  
load   averages:   0.19,   0.16,   0.15  
127   processes:   106   sleeping,   20   running,   1   zombie  
cpu   states:  
cpu       load       user       nice         sys       idle     block     swait       intr       ssys  
  0         0.17       3.0%       0.0%       0.0%     97.0%       0.0%       0.0%       0.0%       0.0%  
  1         0.22       4.0%       0.0%       0.0%     96.0%       0.0%       0.0%       0.0%       0.0%  
---       ----     -----     -----     -----     -----     -----     -----     -----     -----  
avg       0.19       3.0%       0.0%       0.0%     97.0%       0.0%       0.0%       0.0%       0.0%  

memory:   3263472k   (3218956k)   real,   7660516k   (7583204k)   virtual,   1499376k   free     page#   1/13  

cpu   tty     pid   username   pri   ni       size         res   state         time   %wcpu     %cpu   command  
  0       ?     3538   app           152   20     1385m       768m   run       1123:34   25.84   25.79   java  
  0       ?   28832   tomcat       152   20     2973m     1675m   run         464:32   13.33   13.31   java  
  1       ?     2137   root           152   20       306m   93424k   run           41:23     1.24     1.23   java  
  0       ?     2149   root           -27   20   17076k   13084k   run           23:48     0.75     0.75   cmcld  
  0       ?         37   root           152   20     9632k     9632k   run             5:11     0.49     0.49   vxfsd  
  1       ?     1724   app           152   24     1219m       183m   run           22:09     0.45     0.45   java  
  0       ?     3781   app           152   24     1210m       174m   run           17:35     0.33     0.33   java  
  0       ?     1287   root           152   20       251m   64744k   run             7:09     0.26     0.26   java  
  1       ?     2320   root           152   20       297m       157m   run             4:29     0.20     0.20   java  
  1       ?     7282   root           152   20   16492k     4112k   run             0:23     0.20     0.20   rep_server  

    描叙:其中tomcat用户的size大小一直在持续增加,每次大概增长4m。res值呈现波浪式变化,有涨有跌。当tomcat用户的size值增加到2950m   ,res值增加到1700m左右时,系统报:outofmemoryerror   。几乎每隔10天左右就会出现这个问题。  

------------------------------------------------------------------------------------------------  
另外我的tomcat设置为:  
java_opts="-xmx2000m       -xx:permsize=128m       -xx:maxpermsize=256m           -dfile.encoding=gbk"  

关于这几个值的设置我已经试过很多种组合了。  

另外监控jvm的内存分配情况也很正常,最大值为1.7g,但实际应用值为900m  

-------------------------------------------------------------------------------------------------  
  以上是系统环境相关的东东,同时也在程序本身花了工夫去重构代码:  
      1,关闭未closed的结果集  
      2,采用复合查询代替原来的多表查询最终组合的方式  
      3,hibernate查询改为sql查询  
      等等。  
  另外也用jprofile   进行了监控,尚未发现可疑之处。
-------------------------------------------------------------------------------------------------  

目前系统每隔10天左右就会报:outofmemoryerror  

请大家帮忙看看是哪个地方有问题?若有好的建议也请提出。
谢谢!
发表于:2007-10-13 08:29:021楼 得分:0
-xx:maxpermsize=1048576
默认单位为k,怀疑java没有进行单位换算(不懂java..),上面1048576k是1g的空间...试试看,内核进程内存最大可以分配到2g..

还有就是检查细节的使用内存的情况的地方..
发表于:2007-10-15 17:17:572楼 得分:0
应该还是有内存没有释放了吧.
会不会那个返回前,有些资料没有释放.
内存这东西,得小心.
发表于:2007-10-16 09:40:083楼 得分:0
程序的问题可能性大一些!不过,也最不好解决!
发表于:2007-10-17 02:19:504楼 得分:0
我们以前有个一java写的东西也有这样一个问题,   后来发现,我们有个   weakhashmap   来存放一些数据,   但是每次用完之后没有清掉他.

java     有时候比较蠢,他还以为你要继续用那个weakhashmap,   一直没有释放,   结果   ....

检查一下这样类似的地方把.
发表于:2007-10-25 16:03:425楼 得分:0
"compilerthread0"   java.lang.outofmemoryerror问题解决了吗?
有好的方案,感谢通告thl_cn1981@yahoo.com.cn
发表于:2007-10-26 14:32:326楼 得分:0
可试试:
-xms512m   -xmx768m   -xx:maxpermsize=128m   -xx:newsize=300m   -xx:maxnewsize=300m   -xx:+useconcmarksweepgc   -xx:+useparnewgc   -xss128k

具体内存使用参数再调整,如果怀疑内存泄露之类的,可以用jprofiler   检查
发表于:2007-10-29 17:39:477楼 得分:0
tomcat的问题吧,换个服务器!
发表于:2007-10-31 15:13:228楼 得分:0
是不是用户并发量太大了,   一般情况下的java服务器,   超过500个以上的并发就会
频繁出错(尤其是java.lang.outofmemoryerror),   甚至死掉的...
发表于:2007-11-01 09:29:569楼 得分:0
not       enough       swap       space   ,

swap       space   里面满了,swap尽量要设置的大一些


快速检索

最新资讯
热门点击