ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 访问ASM的ONNN进程占用大量CPU

访问ASM的ONNN进程占用大量CPU

原创 Linux操作系统 作者:yangtingkun 时间:2012-04-23 23:50:58 0 删除 编辑

客户的11.2 RAC环境中突然一个O002进程占用了100%CPU,且一直不释放。

 

 

导致这个问题的原因应该是通过ASMCMD工具从ASM中拷贝了一个归档日志到本地磁盘,随后就发现一个ora_

[root@node-2 ~]# top

top - 21:14:25 up 257 days,  4:33,  2 users,  load average: 1.69, 1.70, 1.56
Tasks: 994 total,   2 running, 991 sleeping,   0 stopped,   1 zombie
Cpu(s):  2.2%us,  0.1%sy,  0.0%ni, 97.5%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  132060636k total, 131006336k used,  1054300k free,   535524k buffers
Swap: 67108856k total,  1649936k used, 65458920k free, 39758892k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 7622 oracle    25   0 50.6g  18m  16m R 100.0  0.0   9498:03 oracle
29924 root      RT   0  304m  86m  54m S  2.0  0.1   5333:37 osysmond.bin
13804 root      15   0 13424 1844  828 R  1.6  0.0   0:00.16 top
29158 oracle    15   0 50.6g  10g  10g S  1.0  8.2 317:51.59 oracle
30337 root      15   0  971m  25m  13m S  1.0  0.0   1938:12 orarootagent.bi
.
.
.
   25 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/7
[root@node-2 ~]# ps -ef|grep 7622
oracle    7622     1  2  2011 ?        6-14:18:09 ora_o002_orcl2
root     13810 13645  0 21:14 pts/1    00:00:00 grep 7622

从数据库中查询,发现这个会话处于空闲等待状态:

[oracle@settle-2 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Mon Apr 23 21:14:45 2012

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> set pages 100 lines 140
SQL> select sid, username, program, status, event from v$session where paddr in (select addr from v$process where spid = 7622);

       SID USERNAME   PROGRAM                        STATUS   EVENT
---------- ---------- ------------------------------ -------- ------------------------------
       529            oracle@node-2 (O002)           ACTIVE   class slave wait

SQL> select sql_id, prev_sql_id from v$session where sid = 529;

SQL_ID        PREV_SQL_ID
------------- -------------

可以看到,这个会话一直处以空闲等待,而且没有执行任何SQL语句。

SQL> select sid, serial# from v$session where sid = 529;

       SID    SERIAL#
---------- ----------
       529         43

SQL> exec dbms_monitor.session_trace_enable(529, 43, true, true)

PL/SQL procedure successfully completed.

SQL> exec dbms_monitor.session_trace_disable(529, 43)

PL/SQL procedure successfully completed.

通过设置TRACE,发现这个异常的会话并没有产生任何的TRACE文件。

由于ONNN进程是ASM连接池进程,当数据库在ASM上创建文件时,就会通过ONNN进程来完成,这个进程在日常很少会处于工作状态。

[oracle@node-2 ~]$ ps -ef|grep ora_o
oracle    3831     1  0 Feb15 ?        00:00:03 ora_o004_orcl2
oracle    6350     1  0  2011 ?        00:00:08 ora_o000_orcl2
oracle    6358     1  0  2011 ?        00:00:08 ora_o003_orcl2
oracle    7475     1  0  2011 ?        00:00:00 ora_o001_orcl2
oracle    7622     1  2  2011 ?        6-15:38:56 ora_o002_orcl2
oracle   28211 28168  0 22:35 pts/1    00:00:00 grep ora_o

[oracle@node-2 ~]$ kill -9 7622

由于ONNN进程并非系统核心进程,且Oracle会在需要的时候自动分配ONNN进程,因此可以通过kill -9的方法来清除会话。结束进程后,top命令显示占用100%CPU资源的进程已经消失。

根据MOS的最新更新,这个问题属于BUG:12929268对应的文档为ora_o00n Process High CPU Usage in 11.2.0.2 [ID 1459376.1]

根据文档的描述,如果ONNN进程空闲时间超过248.5天左右,也就是按照百分之一秒计算超过2G,就会导致ONNN进程陷入死循环中。Oracle对于进程的最大等待时间的定义并不是无符号的LONG,导致进程等待时间只有2G厘秒,而不是4G

Oracle目前没有明确的fixed计划,而给出的解决方案和我上面的方法一致,就是KILL掉对应的进程。另外重启系统可以保证250天内不会再次出现同样的错误。

 

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

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10388032