linux kernel引發的oracle問題及解決
最近測試環境的連線數老是不夠用,session/process 都相應的從5000提到了8000,但還是不夠,而且還是不斷有新環境需要增加。最後根據評估,session數需要50000左右
根據粗略的計算來說,process也需要調整,按照如下的公式.
sessions=(1.1*process+5)
把semmns做了大幅度的調整,從32000調到了70000
> cat /proc/sys/kernel/sem
250 32000 100 256
> sysctl -a |grep sem
kernel.sem = 250 70000 100 256
第二天收到郵件說變更已經部上去了。說Process只調到了16000,當時看到郵件也沒在意。
以下是監控的指標圖,幾分鐘抓一個session報告。生成的圖表如下。
開始兩天,發現有了很大的改進,連線能夠正常關閉,而且session數不到7000的樣子。根據反饋沒發現連線數的問題。
過了兩天發現session數到8000以上就開始很吃力了。而且會時不時的有一些連線不上的情況。我寫了個指令碼,抓session快照的時候也有時候連不上庫。
檢視alert和listener日誌,有以下的錯誤資訊。
-->from Listener.log
03-DEC-2013 12:43:41 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=testwrk34))(sid=TEST)) * (ADDRESS=(PROTOCOL=tcp)(HOST=172.19.192.41)(PORT=56631)) * establish * TEST * 12518
TNS-12518: TNS:listener could not hand off client connection
TNS-12536: TNS:operation would block
TNS-12560: TNS:protocol adapter error
TNS-00506: Operation would block
Linux Error: 11: Resource temporarily unavailable
-->from DB alert log
Errors in file /opt/app/oracle/aaa/admin/TEST/diag/rdbms/TEST/TEST/trace/TEST_psp0_30562.trc:
ORA-27300: OS system dependent operation:fork failed with status: 11
ORA-27301: OS failure message: Resource temporarily unavailable
ORA-27302: failure occurred at: skgpspawn5
Tue Dec 03 12:38:05 2013
在MOS上檢視相關的資訊,說是nproc的配置太低了,無法分配程式了。
但是檢視nproc的情況,感覺沒什麼問題。
* soft nproc 32768
* hard nproc 65536
我就有些糊塗了。檢視機器上其它的例項程式數,加起來都不到200個。
繼續檢視session的情況。最後反覆驗證,確認session數到8000的時候就開始有問題了。就開始琢磨nproc為什麼沒生效。
想到幾天前的郵件,一檢視,終於發現了端倪。
他們當時起庫的時候,發現已經報了proc的錯誤,當調整process的時候,庫直接起不來了。
SQL> startup
ORA-27154: post/wait create failed
ORA-27300: OS system dependent operation:semids_per_proc failed with status: 0
ORA-27301: OS failure message: Error 0
ORA-27302: failure occurred at: sskgpwcr2
ORA-27303: additional information: semids = 264, maxprocs = 45000
SQL> exit
起庫的哥們已檢視nproc的配置,db process設定為16000的時候庫才能起來,然後他就直接設定為了16000,然後還有一些其他的問題,直接順手解決了。
test2 @test1:/root > grep nproc /etc/security/limits.conf
# - nproc - max number of processes
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
* soft nproc 8192
* hard nproc 16384
SQL> startup
ORA-04031: unable to allocate 15193312 bytes of shared memory ("shared pool","unknown object","sga heap(3,0)","KEWS sesstat values")
SQL>
Tunning sga
*.sga_max_size= 6442450944 ==> 8442450944
*.sga_target=6442450944 ==> 8442450944
SQL> startup
ORACLE instance started.
Total System Global Area 8417955840 bytes
Fixed Size 2233168 bytes
Variable Size 3321892016 bytes
Database Buffers 5066719232 bytes
Redo Buffers 27111424 bytes
Database mounted.
Database opened.
檢視郵件的情況,才發現nproc是在第二天早晨被unix team從8000調到16000的。問題的原因就找到了。
kernel的變更沒有生效,只能稍候處理。
這個問題的定位確實有些曲折,希望在操作的時候保留日誌之類的東西,這樣診斷問題會有根據。
根據粗略的計算來說,process也需要調整,按照如下的公式.
sessions=(1.1*process+5)
把semmns做了大幅度的調整,從32000調到了70000
> cat /proc/sys/kernel/sem
250 32000 100 256
> sysctl -a |grep sem
kernel.sem = 250 70000 100 256
第二天收到郵件說變更已經部上去了。說Process只調到了16000,當時看到郵件也沒在意。
以下是監控的指標圖,幾分鐘抓一個session報告。生成的圖表如下。
開始兩天,發現有了很大的改進,連線能夠正常關閉,而且session數不到7000的樣子。根據反饋沒發現連線數的問題。
過了兩天發現session數到8000以上就開始很吃力了。而且會時不時的有一些連線不上的情況。我寫了個指令碼,抓session快照的時候也有時候連不上庫。
檢視alert和listener日誌,有以下的錯誤資訊。
-->from Listener.log
03-DEC-2013 12:43:41 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=testwrk34))(sid=TEST)) * (ADDRESS=(PROTOCOL=tcp)(HOST=172.19.192.41)(PORT=56631)) * establish * TEST * 12518
TNS-12518: TNS:listener could not hand off client connection
TNS-12536: TNS:operation would block
TNS-12560: TNS:protocol adapter error
TNS-00506: Operation would block
Linux Error: 11: Resource temporarily unavailable
-->from DB alert log
Errors in file /opt/app/oracle/aaa/admin/TEST/diag/rdbms/TEST/TEST/trace/TEST_psp0_30562.trc:
ORA-27300: OS system dependent operation:fork failed with status: 11
ORA-27301: OS failure message: Resource temporarily unavailable
ORA-27302: failure occurred at: skgpspawn5
Tue Dec 03 12:38:05 2013
在MOS上檢視相關的資訊,說是nproc的配置太低了,無法分配程式了。
但是檢視nproc的情況,感覺沒什麼問題。
* soft nproc 32768
* hard nproc 65536
我就有些糊塗了。檢視機器上其它的例項程式數,加起來都不到200個。
繼續檢視session的情況。最後反覆驗證,確認session數到8000的時候就開始有問題了。就開始琢磨nproc為什麼沒生效。
想到幾天前的郵件,一檢視,終於發現了端倪。
他們當時起庫的時候,發現已經報了proc的錯誤,當調整process的時候,庫直接起不來了。
SQL> startup
ORA-27154: post/wait create failed
ORA-27300: OS system dependent operation:semids_per_proc failed with status: 0
ORA-27301: OS failure message: Error 0
ORA-27302: failure occurred at: sskgpwcr2
ORA-27303: additional information: semids = 264, maxprocs = 45000
SQL> exit
起庫的哥們已檢視nproc的配置,db process設定為16000的時候庫才能起來,然後他就直接設定為了16000,然後還有一些其他的問題,直接順手解決了。
test2 @test1:/root > grep nproc /etc/security/limits.conf
# - nproc - max number of processes
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
* soft nproc 8192
* hard nproc 16384
SQL> startup
ORA-04031: unable to allocate 15193312 bytes of shared memory ("shared pool","unknown object","sga heap(3,0)","KEWS sesstat values")
SQL>
Tunning sga
*.sga_max_size= 6442450944 ==> 8442450944
*.sga_target=6442450944 ==> 8442450944
SQL> startup
ORACLE instance started.
Total System Global Area 8417955840 bytes
Fixed Size 2233168 bytes
Variable Size 3321892016 bytes
Database Buffers 5066719232 bytes
Redo Buffers 27111424 bytes
Database mounted.
Database opened.
檢視郵件的情況,才發現nproc是在第二天早晨被unix team從8000調到16000的。問題的原因就找到了。
kernel的變更沒有生效,只能稍候處理。
這個問題的定位確實有些曲折,希望在操作的時候保留日誌之類的東西,這樣診斷問題會有根據。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1063393/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux核心引數(如kernel.shmmax)及Oracle相關引數調整LinuxHMMOracle
- oracle壞塊問題及解決辦法Oracle
- 安裝IE8後引發的兩個問題及解決辦法
- Oracle 常見的錯誤問題及解決方法Oracle
- [記錄]Standby相關引數及gap問題解決
- oracle 鎖問題的解決Oracle
- Oracle 錯誤總結及問題解決 ORAOracle
- 解決掛起/休眠時遭遇kernel panic問題(轉)
- linux引數之/proc/sys/kernel詳解Linux
- Oracle觸發器死鎖問題解決Oracle觸發器
- 發現問題,解決問題
- 【DataBase】:使用Oracle遇到的幾個問題及解決辦法DatabaseOracle
- Oracle學習遇到的問題收集及解決 - 不斷更新Oracle
- oracle壞塊問題的解決Oracle
- 常見問題及解決
- 奇怪的登入問題及解決
- Linux 下kernel.shmmax 的設定問題LinuxHMM
- MySQL 在併發場景下的問題及解決思路MySql
- 微信小程式開發中遇到的問題及解決方式微信小程式
- MySQL在併發場景下的問題及解決思路MySql
- Oracle資料庫基本知識及問題解決(轉)Oracle資料庫
- Linux核心引數(如kernel.shmmax)及Oracle相關引數調整(如SGA_MAX_SIZE)LinuxHMMOracle
- 資料併發操作帶的的問題及解決辦法
- Oracle回滾段的概念,用法和規劃及問題的解決Oracle
- Oracle 解決鎖表問題Oracle
- oracle字元亂碼問題的解決Oracle字元
- oracle的2G問題解決Oracle
- Git常見問題及解決Git
- Harbor搭建及配置 問題解決
- 跨域問題及解決方案跨域
- redis安裝及問題解決Redis
- 常見問題及解決方案
- CAS導致的ABA問題及解決
- IPython的安裝及問題解決Python
- Kafka常見的問題及解決方案Kafka
- oracle控制檔案及引數檔案問題Oracle
- Unity容器建構函式引數迴圈引用問題及解決Unity函式
- 多執行緒併發同步問題及解決方案執行緒