早上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,学习了。
我顶
~~
今天福建也遇到这个问题了….来学习下…