Oracle 10g 兩個監聽程式的故障

Dodd發表於2008-01-30

今天又有一臺Oracle 10.2.0.1資料庫出現故障,開發人員報告說:無法通過監聽正常連線。

登入伺服器檢查,發現cpu idle為0,並且大量oracle程式佔用很高cpu:

top - 15:38:03 up 198 days, 21:57,  3 users,  load average: 35.73, 34.97, 31.51
Tasks: 123 total,  36 running,  87 sleeping,   0 stopped,   0 zombie
Cpu(s): 35.6% us, 64.4% sy,  0.0% ni,  0.0% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:   2074952k total,  1350376k used,   724576k free,    80720k buffers
Swap:  4192956k total,   350328k used,  3842628k free,   960848k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                        
 3385 oracle    25   0  894m  49m  48m R 75.1  2.4  11:38.10 oracle                                                         
 3389 oracle    25   0  895m 118m 116m R 61.5  5.9  25:40.05 oracle                                                         
11296 oracle    25   0  893m  20m  18m R 61.5  1.0  13:39.38 oracle                                                         
 3377 oracle    25   0  941m 449m 447m R 54.6 22.2  20:14.19 oracle                                                         
 3373 oracle    25   0  892m 9568 9404 R 34.2  0.5  13:15.53 oracle                                                         
 3406 oracle    25   0  908m  20m  10m R 27.3  1.0  17:05.34 oracle                                                         
 9207 oracle    25   0  894m 172m 169m R 27.3  8.5  18:25.18 oracle                                                         
 3381 oracle    25   0  894m  33m  32m R 20.5  1.7  31:30.03 oracle                                                         
13803 oracle    25   0  893m  16m  15m R 13.7  0.8   1:22.09 oracle                                                         
    1 root      16   0  2016  500  472 S  0.0  0.0   0:17.30 init                                                           
    2 root      RT   0     0    0    0 S  0.0  0.0   0:01.57 migration/0                                                    
    3 root      34  19     0    0    0 S  0.0  0.0   0:00.02 ksoftirqd/0       

並且此時sys使用者無法登入sqlplus:

[oracle@itflow2 ~]$ sqlplus "/ as sysdba"

[oracle@itflow2 ~]$

並且檢查系統發現,系統上有兩個listener程式,其中一個是另外一個的子程式:

[oracle@itflow2 ~]$ ps -ef | grep tnslsnr
oracle   24644     1 12 02:50 ?        00:01:23 /opt/oracle/product/10.2.1/bin/tnslsnr LISTENER -inherit
oracle   29732     24644 1 30 15:50 ?        00:03:23 /opt/oracle/product/10.2.1/bin/tnslsnr LISTENER -inherit
oracle   25804 25762  0 16:18 pts/0    00:00:00 grep tnslsnr

之前已經碰到過這個Bug,Metalink有關於這個Bug的解釋和解決方案,Bug號為:4518443

Oracle的解釋為: Oracle 10g在系統較大壓力下,listener程式會spawn一個子程式,導致listener程式hang住:

Bug 4518443  Listener hang under load

 This note gives a brief overview of bug 4518443.

Affects:

Product (Component) Oracle Application Server 10g (Oracle Nofication Service)
Range of versions believed to be affected Versions < 11
Versions confirmed as being affected
  • 10.1.0.5
  • 10.2.0.1
  • 10.2.0.2
Platforms affected Generic (all / most platforms affected)

Fixed:

This issue is fixed in
  • 10.2.0.3 (Server Patch Set)

Symptoms:

Related To:

  • Network

Description

The listener process can hang under load while spawning a process.  
The last process the listener spawned will have a stack which 
includes a mutex lock call in ons_atfork_prepare().

 

其實以前有一臺Oracle 10g的伺服器也碰到過這個Bug,當時根據Metalink的解決方案,在listener.ora檔案裡新增下面一行:


SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF

但是,後來感覺這個引數設定並沒有生效,那臺Oracle伺服器仍然有這個Bug。

看來只有將Oracle升級為10.2.0.3了。  也許這是一個徹底的解決方法。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7220098/viewspace-166466/,如需轉載,請註明出處,否則將追究法律責任。

相關文章