DB error due to HP-UX Error:23

DB:Oracle 9.2.0.7
OS:HP-UX 9000/800 64bit
周五接到应用人员反映其程序日志中报如下错误:[@more@]

写记录时发生一个错误。请继续操作,如果问题仍然存在,请系统管理员检查应用程序的配置。
(SBL-DBC-00111)
ORA-01116: error in opening database file 762
ORA-01110: data file 762: '/dev/vgcrm09/rlv9_data16g_21'
ORA-27041: unable to open file
HP-UX Error: 23: File table overflow Additional information: 3 (0x56b5) EAITransport EAITransportWarning 2 0
2012-03-22 16:31:13 [3] Stack trace:
写记录时发生一个错误。请继续操作,如果问题仍然存在,请系统管理员检查应用程序的配置。
(SBL-DBC-00111)
ORA-01116: error in opening database file 232
ORA-01110: data file 232: '/dev/vgcrm04/rlv4_undo8g_03'
ORA-27041: unable to open file
HP-UX Error: 23: File table overflow Additional information: 3 (0x56b5) EAITransport EAITransportWarning 2 0
2012-03-22 16:31:19 [3] Stack trace:


由上可知,数据库在访问(或者打开)数据文件(如上所报:/dev/vgcrm04/rlv4_undo8g_03)时报HP-UX Error:23:File table overflow。
23为HP-UX系统中的错误编号,可通过查询/usr/include/sys/errno.h文件得到其详细内容:
crmdb1:[/oracle/wangz]$grep 23 /usr/include/sys/errno.h
* @(#)B11.23_LR common/sys/errno.h $Revision: $
#define ENFILE 23 /* File table overflow */
23表示的意思是:File table overflow,说明当前系统的file table已经溢出了,在HP-UX中,file table大小由内核参数nfile决定,nfile决定了在同一时间系统中所有进程允许打开文件数量的最大值。接着查询系统当前nfile的使用情况:
crmdb1:[/oracle/horizon/wangz]$kcusage |grep nfile
nfile 1495381 / 1500000
当前系统nfile值为1500000,而当前已经使用到了1495381,非常接近于nfile的上限值,因此刚才的报错就很容易解释了。

随后查看主机操作系统日志信息,在/var/adm/syslog/syslog.log文件中发现如下错误:
Mar 22 11:08:00 crmdb1 vmunix: pid 5540 (oracle) killed: stdio_cleanup - system wide limit of open files reached
Mar 22 11:08:05 crmdb1 vmunix: pid 5584 (oracle) killed: stdio_cleanup - system wide limit of open files reached
Mar 22 11:08:05 crmdb1 vmunix: pid 5587 (oracle) killed: stdio_cleanup - system wide limit of open files reached
Mar 22 11:08:05 crmdb1 vmunix: file: table is full

通过询问研发人员了解,其近期并未有新应用程序上线,连接数也并未高出平时太多,还是很怀疑是程序出了问题。该问题需要持续跟踪监控。
解决该问题的最简单方法是加大内核参数nfile,不过如果不从根本上找到原因,不管将nfile设成多大,还是有可能会用完的,何况当前1500000已是一个不算小的阀值了。

以下列出关于处理此问题可能会用到的脚本和命令:
1、显示当前内核参数配置
kctune
2、显示当前nfile的使用是多少
kcusage | grep nfile
或者
sar -v 2 3 -- 2:间隔时间(s);3执行次数
3、显示某个进程打开的文件数及详细文件
/usr/local/bin/lsof -a -p 29999 -- 29999是操作系统进程号
4、显示当前系统每个进程打开的文件总数(即使用的nfile项)
创建脚本/tmp/proc_num_file
然后在命令行运行:
glance -adviser_only -syntax /tmp/proc_num_file -iterations 1 > /tmp/proc_num_file.out
查看/tmp/proc_num_file.out结果文件即可

proc_num_file脚本copy于HP网站

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25834554/viewspace-1057702/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25834554/viewspace-1057702/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值