(悬赏1000分)java.lang.OutOfMemoryError(hp-unix高手请进)
目前有报:
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
请大家帮忙看看是哪个地方有问题?若有好的建议也请提出。
谢谢!