早上4点多就被叫起来,说某现网的数据库侦听挂了。数据库连不上去,报以下的错误:
1 2 3 4 5 6 7 8 |
$ sqlplus user/pwd@sid SQL*Plus: Release 9.2.0.6.0 - Production on Fri Jun 12 04:58:05 2009 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. ERROR: ORA-12500: TNS:listener failed to start a dedicated server process |
登录后检查数据库的侦听进程还在,检查lsnrctl status的状态也是正常。
检查侦听的log发现,有大量连接拒连:
1 2 3 4 5 6 7 8 9 |
12-JUN-2009 02:01:08 * 12546 TNS-12546: TNS:permission denied TNS-12560: TNS:protocol adapter error TNS-00516: Permission denied 12-JUN-2009 02:01:08 * 12546 TNS-12546: TNS:permission denied TNS-12560: TNS:protocol adapter error TNS-00516: Permission denied |
但是这些连接是因为sqlnet.ora中配置了TCP.VALIDNODE_CHECKING和TCP.INVITED_NODES,所以拒连了部分连接。进一步检查发现,侦听的log中还有如下的报错:
1 2 3 4 5 6 |
12-JUN-2009 03:30:00 * (CONNECT_DATA=(SERVICE_NAME=myuser)(CID=(PROGRAM=)(HOST=my_svr03)(USER=user16))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.88)(PORT=65323)) * establish * myuser * 12500 TNS-12500: TNS:listener failed to start a dedicated server process TNS-12540: TNS:internal limit restriction exceeded TNS-12560: TNS:protocol adapter error TNS-00510: Internal limit restriction exceeded HPUX Error: 12: Not enough space |
开始还以为是主机的空间不足,导致侦听的log无法写出,但是检查了之后也是发现主机空间也是够用的,log的大小也没超过2G。
进一步检查alertlog,我们有了进一步的发现:
1 2 3 4 |
Fri Jun 12 03:37:09 2009 skgpspawn failed:category = 27142, depinfo = 22, op = fork, loc = skgpspawn5 skgpspawn failed:category = 27142, depinfo = 22, op = fork, loc = skgpspawn5 Fri Jun 12 05:06:12 2009 |
原来是swap空间的问题。
本着首先解决故障的原则,先重启了侦听。重启侦听后,连接恢复正常。
但是用swapinfo去看了一下swap使用情况,天,使用率已经90%了。
1 2 3 4 5 6 7 |
$ swapinfo -tam Mb Mb Mb PCT START/ Mb TYPE AVAIL USED FREE USED LIMIT RESERVE PRI NAME dev 24576 0 24576 0% 0 - 1 /dev/vg00/lvol2 reserve - 24576 -24576 memory 29374 24064 5310 82% total 53950 48640 5310 90% - 0 - |
而当时的内存使用情况:
1 2 3 4 5 6 7 8 9 10 11 12 |
$ vmstat 2 10 procs memory page faults cpu r b w avm free re at pi po fr de sr in sy cs us sy id 1 1 0 1312217 1432154 48 5 0 0 0 0 4 7205 28718 2680 5 2 93 1 1 0 1312217 1432046 14 0 0 0 0 0 0 4443 5585 890 5 0 94 1 1 0 1312217 1432433 148 0 0 0 0 0 0 4426 5865 898 5 2 93 1 0 0 1305630 1428981 94 0 0 0 0 0 0 4449 5737 915 5 0 94 1 0 0 1305630 1428981 60 0 0 0 0 0 0 4431 5477 915 7 0 92 1 0 0 1305630 1428853 38 0 0 0 0 0 0 4424 5467 913 6 0 94 1 0 0 1305630 1428837 24 0 0 0 0 0 0 4423 5319 908 4 0 96 1 0 0 1305630 1428837 15 0 0 0 0 0 0 4447 5327 925 5 1 94 1 0 0 1319493 1428837 9 0 0 0 0 0 0 4461 5332 924 6 2 92 |
有将近6G的物理内存剩余。
为何在物理内存还有不少剩余的情况下,还占用了那么多的swap空间呢,查阅了相关的文档发现,原来对于HPUX的机器,每申请一部分物理内存,系统就要在swap空间再划一块对应的空间用于pseudo swap(伪交换),因此建议物理内存和swap空间的比例关系在1:1左右。而我们的db主机在上周升级了物理内存,但是没有扩swap空间,因此发生了这样的情况。
btw:swap的大小和主机的2个核心参数有关maxswapchunks和swchunk,SWAP的最大值是这两个值的乘积。调整swap可以在线进行,但是调整这2个参数需要重启主机。
3条评论
没有玩过hp-ux,学习了。
我顶
~~
今天福建也遇到这个问题了….来学习下…