listener的内存泄漏


今天收到告警邮件,某省的数据库无法登录,在alertlog中有如下的报错:

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检查:

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之后,才得到解决:

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 ):

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吧。

· 【文章发布信息】发表于: 2009-04-07 @ 15:02:53 · ||分类: ..experience, Working case

6 条评论 »

  1. mayitong@hotmail.com 于 2009-04-07 @ 15:21:06 留言

    呵呵,2年前遇到了楼主一样的问题,幸运的是提前发现了内存泄漏的问题,没有出现ORA-27102: out of memory,但时时hp 8420 pa64 bit 的CPU,最后打了9.2.0.8 CPU PATCH就好了。

  2. brucewoo 于 2009-04-08 @ 09:19:37 留言

    3 ? 21586 oracle 154 20 39244K 3680K sleep 0:00 0.11 0.07 tnslsnr

    这个不止15K吧

  3. 小荷 于 2009-04-08 @ 11:56:48 留言

    re brucewoo:谢谢指出,sorry,看错了。是3M多。

  4. hoorace 于 2009-04-09 @ 09:16:44 留言

    好像我们的sims系统内存使用也存在这样的问题,不知道你是不是在sims主机上弄的。

  5. hoorace 于 2009-04-09 @ 09:17:42 留言

    发现你的pagerank好像丢了,去写一下投诉邮件吧。

  6. OoNiceDream 于 2009-04-19 @ 15:29:42 留言

    以前一个9208的环境也有同样的问题,后来就打了这个补丁。
    记得可以用ps -el | grep lsnr看内存,应该比TOP方便点,呵呵

RSS 为此帖反馈评论 · 反向跟踪 网站

留条评论