今天收到告警邮件,某省的数据库无法登录,在alertlog中有如下的报错:
1 2 3 4 5 6 |
Tue Mar 31 16:38:11 2009 Errors in file /oracle/app/oracle/admin/zjfs/bdump/zjfs_ora_22423.trc: ORA-27102: out of memory HPUX-ia64 Error: 12: Not enough space Additional information: 103 Additional information: 524288 |
登录数据库主机检查内存剩余量不到10%,用top检查:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
System: zj-db01 Wed Apr 1 14:10:47 2009 Load averages: 0.12, 0.18, 0.28 387 processes: 362 sleeping, 25 running Cpu states: CPU LOAD USER NICE SYS IDLE BLOCK SWAIT INTR SSYS 0 0.21 8.4% 0.0% 7.0% 84.7% 0.0% 0.0% 0.0% 0.0% 1 0.09 3.4% 0.0% 2.4% 94.2% 0.0% 0.0% 0.0% 0.0% 2 0.11 3.4% 0.0% 0.0% 96.6% 0.0% 0.0% 0.0% 0.0% 3 0.10 3.2% 0.0% 1.0% 95.8% 0.0% 0.0% 0.0% 0.0% --- ---- ----- ----- ----- ----- ----- ----- ----- ----- avg 0.12 4.6% 0.0% 2.6% 92.8% 0.0% 0.0% 0.0% 0.0% Memory: 4456068K (2521320K) real, 6115756K (3135960K) virtual, 391416K free Page# 1/15 CPU TTY PID USERNAME PRI NI SIZE RES STATE TIME %WCPU %CPU COMMAND 0 ? 2307 oracle 178 20 3015M 24612K sleep 4383:34 15.11 15.08 oraclezjfs 2 ? 2228 oracle 178 20 2986M 9624K sleep 3580:19 2.94 2.93 oraclezjfs 1 ? 2309 oracle 178 20 2986M 5536K sleep 541:29 2.92 2.91 oraclezjfs 1 ? 4400 oracle 154 20 1375M 1340M sleep 11224:04 2.04 2.04 tnslsnr 1 ? 2528 oracle 178 20 2986M 5612K sleep 15:05 1.32 1.32 oraclezjfs 1 ? 4380 oracle 178 20 3009M 35136K sleep 268:00 1.16 1.16 ora_lgwr_zjfs 3 ? 4378 oracle 178 20 3009M 35152K sleep 244:54 0.74 0.74 ora_dbw0_zjfs 1 ? 54 root 152 20 3312K 2944K run 136:01 0.45 0.45 vxfsd 3 ? 1439 root 152 20 207M 84724K run 103:21 0.40 0.40 cimprovagt 3 ? 1442 root 152 20 38312K 2820K run 2725:46 0.36 0.36 cimprovagt 3 ? 12064 oracle 178 20 2986M 5264K sleep 0:20 0.32 0.32 oraclezjfs 2 ? 1436 root 152 20 56792K 13976K run 180:41 0.23 0.23 cimserver 3 pts/ta 21448 oracle 168 20 10836K 1284K sleep 0:00 0.22 0.22 top 2 ? 2381 oracle 178 20 2987M 5944K sleep 419:20 0.18 0.18 oraclezjfs 1 ? 38 root 152 20 432K 384K run 60:21 0.16 0.16 schedcpu 2 pts/tc 21573 oracle 178 20 10964K 1412K run 0:00 0.27 0.15 top 2 ? 21551 oracle 178 20 2986M 5260K sleep 0:00 0.16 0.14 oraclezjfs 3 ? 1793 root 152 20 113M 17208K run 6:09 0.14 0.14 vxsvc 0 ? 20 root 191 20 360K 320K run 33:43 0.13 0.13 ksyncer_daemon 2 ? 1429 root 152 20 25516K 5536K run 4:42 0.12 0.12 rpcd 1 ? 4297 root -27 20 46772K 38548K run 31:58 0.12 0.12 cmcld 2 ? 21518 oracle 178 20 2986M 5260K sleep 0:00 0.13 0.12 oraclezjfs 2 ? 1228 root 154 20 7812K 848K sleep 126:00 0.10 0.10 sendmail: 2 ? 39 root 191 20 288K 256K run 305:44 0.08 0.08 pagezerod 2 ? 1589 root 152 20 25072K 3992K run 1:20 0.08 0.08 swagentd $ $ |
发现listener占用的内存非常大,几乎有1个多G,检查连接数,发现大部分为jdbc的长连接,连接也不是非常频繁。几乎和平时一样。
尝试清空listener的log,稍有缓解,但是还是非常高,尝试lsnrctl reload之后,还是一样,占据的内存不变。直到重启lsnr之后,才得到解决:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
System: zj-db01 Wed Apr 1 14:11:31 2009 Load averages: 0.10, 0.16, 0.27 387 processes: 361 sleeping, 26 running Cpu states: CPU LOAD USER NICE SYS IDLE BLOCK SWAIT INTR SSYS 0 0.16 1.0% 0.0% 0.0% 99.0% 0.0% 0.0% 0.0% 0.0% 1 0.07 3.0% 0.0% 0.0% 97.0% 0.0% 0.0% 0.0% 0.0% 2 0.10 7.9% 0.0% 3.0% 89.1% 0.0% 0.0% 0.0% 0.0% 3 0.07 4.0% 0.0% 0.0% 96.0% 0.0% 0.0% 0.0% 0.0% --- ---- ----- ----- ----- ----- ----- ----- ----- ----- avg 0.10 4.0% 0.0% 1.0% 95.0% 0.0% 0.0% 0.0% 0.0% Memory: 3123252K (1238828K) real, 4780156K (1872504K) virtual, 1724232K free Page# 1/15 CPU TTY PID USERNAME PRI NI SIZE RES STATE TIME %WCPU %CPU COMMAND 2 ? 2307 oracle 178 20 3015M 24612K sleep 4383:40 14.81 14.78 oraclezjfs 1 ? 2228 oracle 178 20 2986M 9624K sleep 3580:20 2.95 2.95 oraclezjfs 1 ? 2309 oracle 178 20 2986M 5536K sleep 541:30 2.83 2.83 oraclezjfs 3 ? 2528 oracle 178 20 2986M 5612K sleep 15:05 1.44 1.44 oraclezjfs 1 ? 4380 oracle 178 20 3009M 35136K sleep 268:00 1.27 1.27 ora_lgwr_zjfs 3 ? 1442 root 152 20 38312K 2820K run 2725:47 0.71 0.71 cimprovagt 0 ? 4378 oracle 178 20 3009M 35152K sleep 244:54 0.54 0.54 ora_dbw0_zjfs 1 ? 54 root 152 20 3312K 2944K run 136:01 0.45 0.45 vxfsd 3 ? 1439 root 152 20 207M 84724K run 103:21 0.43 0.43 cimprovagt 3 ? 12064 oracle 178 20 2986M 5264K sleep 0:20 0.40 0.40 oraclezjfs 2 ? 2381 oracle 178 20 2987M 5944K sleep 419:20 0.38 0.38 oraclezjfs 2 ? 1436 root 152 20 56792K 13976K run 180:41 0.30 0.30 cimserver 3 pts/ta 21448 oracle 168 20 10836K 1284K sleep 0:00 0.21 0.21 top 1 ? 38 root 152 20 432K 384K run 60:21 0.15 0.15 schedcpu 3 ? 1793 root 152 20 113M 17208K run 6:09 0.14 0.14 vxsvc 2 ? 1429 root 152 20 25516K 5536K run 4:42 0.12 0.12 rpcd 1 ? 4297 root -27 20 46772K 38548K run 31:58 0.12 0.12 cmcld 0 ? 20 root 191 20 360K 320K run 33:43 0.10 0.10 ksyncer_daemon 2 ? 1228 root 154 20 7812K 848K sleep 126:00 0.08 0.08 sendmail: 2 ? 39 root 191 20 288K 256K run 305:44 0.08 0.08 pagezerod 2 ? 1589 root 152 20 25072K 3992K run 1:20 0.08 0.08 swagentd 3 ? 2110 root 154 10 8700K 1428K sleep 66:43 0.07 0.07 psmctd 3 ? 21586 oracle 154 20 39244K 3680K sleep 0:00 0.11 0.07 tnslsnr 0 ? 4376 oracle 178 20 2986M 10496K sleep 36:10 0.07 0.07 ora_pmon_zjfs 1 ? 4305 root -14 20 11808K 1180K sleep 42:15 0.06 0.06 cmnetd |
此时已经恢复到3M多的内存。
经查metelink,这是一个9208上的bug,适用于所有的os平台:Bug 5576565 ,如果遇到和我一样问题的朋友,可以注意一下了,解决的方法有2个(详见Doc ID: 557397.1 ):
1 2 3 4 5 |
Solution ------------------------------------------------------- Restarting the listener is a temporary workaround. OR Apply Patch 5576565 for 9.2.0.8 Oracle RDBMS. |
另外,再提一下在操作的时候,用了reload。其实reload仅仅是再次加载listener.ora文件,没有真正的stop listener,如果要重启,还是老老实实的用stop和start吧。
6条评论
呵呵,2年前遇到了楼主一样的问题,幸运的是提前发现了内存泄漏的问题,没有出现ORA-27102: out of memory,但时时hp 8420 pa64 bit 的CPU,最后打了9.2.0.8 CPU PATCH就好了。
3 ? 21586 oracle 154 20 39244K 3680K sleep 0:00 0.11 0.07 tnslsnr
这个不止15K吧
re brucewoo:谢谢指出,sorry,看错了。是3M多。
好像我们的sims系统内存使用也存在这样的问题,不知道你是不是在sims主机上弄的。
发现你的pagerank好像丢了,去写一下投诉邮件吧。
以前一个9208的环境也有同样的问题,后来就打了这个补丁。
记得可以用ps -el | grep lsnr看内存,应该比TOP方便点,呵呵