swap空间不够导致连接侦听失败

早上4点多就被叫起来,说某现网的数据库侦听挂了。数据库连不上去,报以下的错误:

登录后检查数据库的侦听进程还在,检查lsnrctl status的状态也是正常。

检查侦听的log发现,有大量连接拒连:

但是这些连接是因为sqlnet.ora中配置了TCP.VALIDNODE_CHECKING和TCP.INVITED_NODES,所以拒连了部分连接。进一步检查发现,侦听的log中还有如下的报错:

开始还以为是主机的空间不足,导致侦听的log无法写出,但是检查了之后也是发现主机空间也是够用的,log的大小也没超过2G。
进一步检查alertlog,我们有了进一步的发现:

原来是swap空间的问题。
本着首先解决故障的原则,先重启了侦听。重启侦听后,连接恢复正常。
但是用swapinfo去看了一下swap使用情况,天,使用率已经90%了。

而当时的内存使用情况:

有将近6G的物理内存剩余。

为何在物理内存还有不少剩余的情况下,还占用了那么多的swap空间呢,查阅了相关的文档发现,原来对于HPUX的机器,每申请一部分物理内存,系统就要在swap空间再划一块对应的空间用于pseudo swap(伪交换),因此建议物理内存和swap空间的比例关系在1:1左右。而我们的db主机在上周升级了物理内存,但是没有扩swap空间,因此发生了这样的情况。

btw:swap的大小和主机的2个核心参数有关maxswapchunks和swchunk,SWAP的最大值是这两个值的乘积。调整swap可以在线进行,但是调整这2个参数需要重启主机。

相关文章

3条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据