Shell Limits設定問題導致使用者不能登入

沃趣科技發表於2018-05-25


| 故障現象

前幾天,突然間某資料庫主機不能su切換到grid使用者。

發生故障的環境為:RHEL 6.7,ORACLE 11gR2 RAC,其中叢集節點1發生此故障,而節點2狀態正常。

故障現象如下:

點選(此處)摺疊或開啟

  1. 本地節點從oracle使用者su到grid使用者,錯誤如下:
  2. [oracle@node1 /home/oracle]$su - grid
  3. su: cannot set user id: Resource temporarily unavailable
  4. 透過叢集中的另外一個節點錯誤提示如下:
  5. [grid@node2:/home/grid]$ssh node1
  6. Write failed: Broken pipe
  7. [oracle@node2:/home/oracle]$ssh node1
  8. Last login: Thu May 10 12:28:22 CST 2018
  9. 而oracle使用者正常
  10. 透過遠端連線工具使用grid使用者登入錯誤提示如下:
  11. Connection closed by foreign host.
  12. /var/log/secure報錯如下:
  13. su: pam_keyinit(su-l:session): Unable to change UID to 500 temporarily
  14. su: pam_keyinit(su-l:session): Unable to change UID to 500 temporarily

| 故障分析

參考MOS文件號:1174073.1,可能是limits設定不合理導致的,而Shell Limits會限制使用者資源的使用。

同時根據文件788064.1,進行如下步驟診斷:

1. 檢視叢集狀態,資料庫狀態以及相關日誌資訊。

檢查結果:除了上述現象外,叢集狀態正常,資料庫告警日誌此段時間內沒有任何錯誤,資料庫中也沒有發現異常的等待,客戶的業務也正常。

2. 檢視使用者的程式數。

點選(此處)摺疊或開啟

  1. [oracle@node1 /home/oracle]#ps -u grid -L |wc -l
  2. 1560
  3. 檢視使用者開啟檔案數。

點選(此處)摺疊或開啟

  1. [oracle@node1 /home/oracle]$ lsof -u grid | wc -l
  2. 4000


上述結果表明:當前環境中開啟檔案數較多,而透過檢查使用者的程式,並沒有發現有異常的程式。那極有可能就是設定的limits過小導致。

4. 檢查/etc/security/limits.conf,檢視grid使用者的nproc和nofile設定。

點選(此處)摺疊或開啟

  1. [grid@node1 /home/oracle]$cat /etc/security/limits.conf
  2. # /etc/security/limits.conf
  3. #
  4. #Each line describes a limit for a user in the form:
  5. #
  6. #<domain> <type> <item> <value>
  7. #
  8. #Where:
  9. #<domain> can be:
  10. # - an user name
  11. # - a group name, with @group syntax
  12. # - the wildcard *, for default entry
  13. # - the wildcard %, can be also used with %group syntax,
  14. # for maxlogin limit
  15. #
  16. #<type> can have the two values:
  17. # - "soft" for enforcing the soft limits
  18. # - "hard" for enforcing hard limits
  19. #
  20. #<item> can be one of the following:
  21. # - core - limits the core file size (KB)
  22. # - data - max data size (KB)
  23. # - fsize - maximum filesize (KB)
  24. # - memlock - max locked-in-memory address space (KB)
  25. # - nofile - max number of open files
  26. # - rss - max resident set size (KB)
  27. # - stack - max stack size (KB)
  28. # - cpu - max CPU time (MIN)
  29. # - nproc - max number of processes
  30. # - as - address space limit (KB)
  31. # - maxlogins - max number of logins for this user
  32. # - maxsyslogins - max number of logins on the system
  33. # - priority - the priority to run user process with
  34. # - locks - max number of file locks the user can hold
  35. # - sigpending - max number of pending signals
  36. # - msgqueue - max memory used by POSIX message queues (bytes)
  37. # - nice - max nice priority allowed to raise to values: [-20, 19]
  38. # - rtprio - max realtime priority
  39. #
  40. #<domain> <type> <item> <value>
  41. grid soft nproc 2048
  42. grid hard nproc 4096
  43. grid soft nofile 2048
  44. grid hard nofile 4096
  45. ……

    /etc/security/limits.conf檔案為每個使用者設定系統資源的限制。從以上輸出:從該設定和結合之前查詢結果來看,當前  
   nproc和nofile這兩個值設定得太小。這兩個引數設定除需參照Oracle建議值外還需考慮是否符合實際環境。


  | 解決方案


   根據上述分析中得出:由於設定的nproc和nofile值太小而導致,因此需要修改這兩個值。

1.手動修改/etc/security/limits.conf中的設定。

這兩個值設定參考系統本身的資源情況以及業務情況。因此暫定該環境修改值如下:

點選(此處)摺疊或開啟

  1. [grid@node1 /home/oracle]$cat /etc/security/limits.conf
  2. grid soft nproc 16384
  3. grid hard nproc 16384
  4. grid soft nofile 16384
  5. grid hard nofile 16384

注:可以使用官方提供的oracle-validated包來修改/etc/security/limits.conf,這個包提供修改核心引數,使用者limits等。該RPM包可以從網站獲取。如果是執行在OL6/RHEL6中的Oracle database 11gR2該包名被替換為 oracle-rdbms-server-11gR2-preinstall。

2.檢查故障是否存在。

點選(此處)摺疊或開啟

  1. [oreacl@node1 /home/oracle]#su – grid
  2. Password:
  3. Last login: Thu May 10 13:28:22 CST 2018

透過oracle使用者再次切換到grid使用者時恢復正常。

3.檢視使用者limits。

點選(此處)摺疊或開啟

  1. [grid@node1:/home/grid] $ ulimit -Su
  2. 16384
  3. [grid@node1:/home/grid] $ ulimit -Hu
  4. 16384
  5. [grid@node1:/home/grid] $ ulimit –Sn
  6. 16384
  7. [grid@node1:/home/grid] $ ulimit -Hn
  8. 16384

修改之後grid使用者的nproc和nofile為最新值。

4.附錄:當達到其他limits設定時出現的不同錯誤。

 A. 當達到’open files’限制時錯誤。


    B.當達到’max user processes’限制時錯誤。




| 作者簡介

楊波,沃趣科技資料庫技術專家
主要參與公司產品實施、測試、維護以及最佳化。

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

相關文章