RAC環境產生大量ons進程,導致使用者進程資源耗盡,使用者切換提示Resource temporarily unavailable,racons

來源:互聯網
上載者:User

RAC環境產生大量ons進程,導致使用者進程資源耗盡,使用者切換提示Resource temporarily unavailable,racons
基本要素(時間、使用者、問題)

使用者才實施了LINUX5.8+11.2.0.4的RAC環境,使用一段時間後,當切換的grid使用者的時候,提示Resource temporarily unavailable,如下:

[root@rac01 bin]# su- grid

su: cannot set userid: Resource temporarily unavailable

但是我們在切換其他使用者如oracle使用者的時候,卻能夠正常切換,並且CRS叢集使用正常,用戶端的串連和使用者的使用暫時也沒有影響,使用者在第一次出現這種情況的時候,採用重啟伺服器的方式,暫時解決了問題,但是沒過多久,又再次出現,因此使用者需要徹底解決這個問題,避免出現其他安全隱患,影響正常的業務應用。

問題分析步驟一:檢測作業系統資源限制配置

一般出現這種情況,首先就應該考慮我們在實施過程中作業系統中關於grid使用者資源限制的參數設定得可能存在問題,在實施RAC的過程中,對使用者的資源限制有2個地方/etc/security/limits.conf和/etc/profile,首先就應該檢測下這2個設定檔的內容,如下:

[root@rac01 ~]# cat/etc/security/limits.conf

grid soft nproc 16384

grid hard nproc 65536

grid soft nofile 2047

grid hard nofile 65536

oracle soft nproc 16384

oracle hard nproc65536

oracle soft nofile 2047

oracle hard nofile65536

[root@rac01 ~]# cat/etc/profile

if [ $USER ="oracle" ] || [ $USER = "grid" ]; then

    if[ $SHELL = "/bin/ksh" ]; then

      ulimit-p 16384

      ulimit-n 65536

    else

      ulimit-u 16384 -n 65536

    fi

    umask022

fi

這裡的nproc就是對使用者能夠使用的最大進程數的控制,其中soft是軟式節流 ,使用者可以超過這個設定的值,但一定不能超過hard的值 。一般soft比hard小,hard是硬限制,/etc/security/limits.conf中的格式如下,這裡以fszize這個參數為例:


       我們這裡的grid   soft  nproc 16384和grid  hard nproc 65536就表示grid使用者最多能啟用65536個進程,其中達到16384就發出警告,接下來我們就應該查看下使用者的進程數,如下

[root@rac01 ~]# ps –Ugrid |wc –l

156

[root@rac01 ~]# ps –aux|wc –l

659

       我這裡查看下了進程不多,沒有超過警示值,不應該提示Resource temporarily unavailable的錯誤啊,我這裡懷疑是我用的命令參數可能有問題,通過百度PS的命令介紹,換了個參數執行如下:

[root@rac01 ~]# ps –eL|wc–l

17730

這次我們可以看到明顯的進程異常,一個節點中居然存在16530個進程,而這裡的-e是顯示所有使用者的進程,我們之前的-aux明顯過濾掉了一些進程,這是因為

-a  顯示所有終端機下執行的程式

-e  顯示所有程式

前者只顯示了終端上的所有執行程式,並沒有顯示所有程式,後者才是完整的顯示了當前環境中的所有進程,接下來我們需要認真的排查這些非常規的進程,通過羅列,發現大量的ONS進程,如下:


通過命令匯總一下,總共有16530個ons進程,

[root@rac01 ~]# ps –eL|grepons |wc –l

16530

這下終於找到了問題的根本原因,接下來我們就需要對該問題進行處理。

 

步驟二:ONS進程分析

ONS (Oracle Notification Services)官方解釋如下A publish andsubscribe service for communicating information about all FAN events其主要負責RAC節點間的通訊,是一個很重要的服務進程,為什麼會出現大量的ONS進程呢?ONS has Thousand Processes/Threads and Still Increasing (文檔 ID 1547703.1)給出了原因

APPLIES TO:

OracleDatabase - Enterprise Edition - Version 11.2.0.1 and later
Information in thisdocument applies to any platform.

SYMPTOMS

The number of ONS processes/threads continuously increases. 

oracle   9470 17663  7447  0 7599 07:11?        00:00:00 /orahome/app/grid/opmn/bin/ons-d
oracle    9470 17663  8920  0 7599 07:12?       00:00:00 /orahome/app/grid/opmn/bin/ons -d
oracle    9470 17663 10425  0 7599 07:13?       00:00:00 /orahome/app/grid/opmn/bin/ons -d
..

The output ofcommand - "onsctl debug"

          IPADDRESS                  PORT    TIME   SEQUENCE  FLAGS
--------------------------------------- ------------- -------- --------
                    127.0.0.1 6200 511c7ccb 00000001 00000008
Listener:
 TYPE               BINDADDRESS              PORT  SOCKET
-------- -------------------------------------------- ------
Local                                 127.0.0.1  6100      5
Remote                                      any  6200      6
Remote                                      any  6200      -
Connection Topology: (1)
               IP                     PORT   VERS  TIME
--------------------------------------- ---------- --------
                        127.0.0.1    6200     4 511c7cdd=
                          **                127.0.0.1  6200 
                          **                127.0.0.1   6200 

Server connections:
   ID  CONNECTIONADDRESS             PORT  FLAGS  SENDQ REF WSAQ
-------- -------------------------------------------- ------ ----- --- ----
      6    127.0.0.1                     6200090026 00000 001     
Client connections:
  ID            CONNECTIONADDRESS    PORT  FLAGS  SENDQ REF SUB W
-------- -------------------------------------------- ------ ----- --- --- -
      1         internal    0 01008a 00000 001 002  
      2         127.0.0.1  610001001a 00000 001 001  
      5         127.0.0.1  610001001a 00000 001 000  
 request         127.0.0.1 6100 03201a 00000 001 000 

CAUSE

Misconfigured /etc/hostsfor loopback interface

-------------------------------------------------------------------
127.0.0.1       emsdb01 localhost.localdomainlocalhost
-------------------------------------------------------------------

SOLUTION

Change loopbackinterface to the following:

-------------------------------------------------------------------
127.0.0.1       localhost.localdomainlocalhost
-------------------------------------------------------------------

解決過程步驟一:查看/etc/hosts檔案

我們查看/etc/hosts檔案,發現果然在127.0.0.1這一行,保留了主機名稱,看來還是我們的實施人員實施過程不細緻導致,去掉游標那列的主機名稱,如下

[root@rac01 ~]# cat/etc/hosts

127.0.0.1       rac01 localhost.localdomainlocalhost192.168.4.23 rac01192.168.4.24 rac02192.168.4.27 rac01-vip192.168.4.28 rac02-vip192.168.4.30 scan-rac

       2個節點都調整完成後,按順序重啟下節點,再用onsctl debug命令執行結果如下

ADDRESS                  PORT    TIME   SEQUENCE  FLAGS
--------------------------------------- ------------- -------- --------
                    127.0.0.1 6200 511c7ccb 00000001 00000008
Listener:
 TYPE               BINDADDRESS              PORT  SOCKET
-------- -------------------------------------------- ------
Local                                 127.0.0.1  6100      5
Remote                                      any  6200      6
Remote                                      any  6200      -
Connection Topology: (1)
               IP                     PORT   VERS  TIME
--------------------------------------- ---------- --------
                  127.0.0.1              6200    4 511c7cdd=
               192.168.4.23            6200 
               192.168.4.24            6200 

Server connections:
   ID  CONNECTIONADDRESS             PORT  FLAGS  SENDQ REF WSAQ
-------- -------------------------------------------- ------ ----- --- ----
      6    127.0.0.1                     6200090026 00000 001     
Client connections:
  ID            CONNECTIONADDRESS    PORT  FLAGS  SENDQ REF SUB W
-------- -------------------------------------------- ------ ----- --- --- -
      1         internal    0 01008a 00000 001 002  
      2         127.0.0.1  610001001a 00000 001 001  
      5         127.0.0.1  610001001a 00000 001 000  
 request         127.0.0.1 6100 03201a 00000 001 000 

我們看到與之前相比,節點的IP已經正確的顯示了,然後我們再查詢ons的進程,已經減少到2個左右,問題徹底解決。

[root@rac01 ~]# ps –eL|grepons |wc –l

2

關鍵知識點

1.PS查看進程命令,注意有-和沒得-的區別,例如我們要查看所有進程,應該是ps aux而如果用了ps –aux就不能顯示所有進程,因為:

參數說明:

-a  顯示所有終端機下執行的進程,除了階段作業領導者之外。
 a  顯示現行終端機下的所有進程,包括其他使用者的進程。
-e  
顯示所有進程
 e  列出進程時,顯示每個進程所使用的環境變數。

2.11gr2 RAC實施的時候,一定要記得把hosts檔案中127.0.0.1這列的主機名稱去掉,不然會導致大量的ons進程。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.