当前位置: 首页 > Oracle, oracle 10g, oracle 11g > 正文

ORA-27301 OS failure message Resource temporarily unavailable错误

加班到凌晨3点给开发人员迁移了UAT数据库,之前的UAT数据库和其他数据库是放到同一台主机上的,这台主机是同时运行4个单实例数据库,资源不足,主机响应很慢,后申请独立的主机,将UAT数据库迁移到一台24核64G内存的独立好主机上。操作系统CentOS 5.11,数据库版本11.2.0.4.0。

迁移之后,数据库都运行正常,在快到中午的时候,发现有个业务用户被锁,我在监视监听日志的时候发现如下报错:

msg time='2015-07-10T11:11:29.116+08:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='SL010A-IVOD01'
 host_addr='10.0.97.34'
TNS-12518: TNS:listener could not hand off client connection
 TNS-12536: TNS:operation would block
  TNS-12560: TNS:protocol adapter error
   TNS-00506: Operation would block
    Linux Error: 11: Resource temporarily unavailable
观察告警日志也发现一堆这个错误:
Fri Jul 10 12:14:51 2015
Process J000 died, see its trace file
kkjcre1p: unable to spawn jobq slave process
Errors in file /data/u01/oracle/diag/rdbms/ivldb/uatdb/trace/uatdb_cjq0_2411.trc:
Process startup failed, error stack:
Errors in file /data/u01/oracle/diag/rdbms/ivldb/uatdb/trace/uatdb_psp0_848.trc:
ORA-27300: OS system dependent operation:fork failed with status: 11
ORA-27301: OS failure message: Resource temporarily unavailable
ORA-27302: failure occurred at: skgpspawn3
Process J000 died, see its trace file
kkjcre1p: unable to spawn jobq slave process
Errors in file /data/u01/oracle/diag/rdbms/ivldb/uatdb/trace/uatdb_cjq0_2411.trc:
Process startup failed, error stack:
Errors in file /data/u01/oracle/diag/rdbms/ivldb/uatdb/trace/uatdb_psp0_848.trc:

此时所有的远程连接以及无法访问数据库,经过查询,发现limit限制都正常,内存不足,交换分区已经使用近1GB,检查发现,oracle用户共有2573个进程,可是两个数据库(实例)的连接加起来还不足550个。

[oracle@SL010A-IVOD01 ~]$ ps -ef | wc -l
2573
[oracle@SL010A-IVOD01 ~]$ ps -ef | grep  IFUAT | wc -l
44
[oracle@SL010A-IVOD01 ~]$ ps -ef | grep  uatdb | wc -l
503

那么那两千个进程是什么?分析发现,crontab里有一堆的sh脚本,每分钟运行一次,通过sqlplus连接数据库调用存储过程,以下是这些进程的信息:

[oracle@SL010A-IVOD01 ~]$ ps -ef | grep  cron | wc -l
405
[oracle@SL010A-IVOD01 ~]$ ps -ef | grep  sqlplus | wc -l
394
[oracle@SL010A-IVOD01 ~]$ ps -ef | grep  BT_FUL_PG_IF_FU | wc -l
401
[oracle@SL010A-IVOD01 ~]$ ps -ef | grep sendmail | wc -l
401

可见,服务器上有400个左右的crontab调用的进程,这400个crontab进程又调用了400个sqlplus访问数据库,这400个sqlplus进程又调用了400个存储过程相关的进程,然后crontab进程再掉sh脚本的时候由于没有重定向日志,又掉了400个sendmail进程将日志信息发给oracle操作系统用户。这样一来,就搞出来1600个进程。

后来,开发人员根据业务需求,将部分crontab改成5分钟运行一次,其他改成30分钟一次,问题解决。

本文固定链接: http://www.dbdream.com.cn/2015/07/ora-27301-os-failure-message-resource-temporarily-unavailable%e9%94%99%e8%af%af/ | 信春哥,系统稳,闭眼上线不回滚!

该日志由 dbdream 于2015年07月13日发表在 Oracle, oracle 10g, oracle 11g 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: ORA-27301 OS failure message Resource temporarily unavailable错误 | 信春哥,系统稳,闭眼上线不回滚!
关键字:

ORA-27301 OS failure message Resource temporarily unavailable错误:等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter