【拖雷】一則ORA-12500錯誤的解決案例
環境:
OS:AIX 5.3
$oslevel -s
5300-06-04-0748
DB:Oracle 9206
我們的一臺生產環境,突然系統監測到大量的連線失敗,通過監聽的日誌,可以發現部分連線是成功的,部分連線是失敗的。如
成功的連線
14-APR-2008 21:08:31 * (connect_data=(service_name=feel)(server=dedicated)(CID=(PROGRAM=java)(HOST=shop48.cm2)(USER=admin))) * (ADDR
ESS=(PROTOCOL=tcp)(HOST=172.19.26.48)(PORT=49288)) * establish * feel * 0
失敗的連線
14-APR-2008 21:08:31 * (connect_data=(service_name=feel)(server=dedicated)(CID=(PROGRAM=java)(HOST=app131)(USER=admin))) * (ADDRESS=
(PROTOCOL=tcp)(HOST=192.168.60.131)(PORT=55076)) * establish * feel * 12500
TNS-12500: TNS:listener failed to start a dedicated server process
TNS-12540: TNS:internal limit restriction exceeded
TNS-12560: TNS:protocol adapter error
TNS-00510: Internal limit restriction exceeded
IBM/AIX RISC System/6000 Error: 12: Not enough space
失敗的連線反饋給前端的錯誤是Ora-12500錯誤,系統級別的錯誤是internal limit restriction exceeded,以及錯誤12:Not enough space。通常,AIX的錯誤12都是指記憶體不夠,但是這個系統的總記憶體是64G,還存在大量剩餘空間,交換空間的使用率也不超過2%。
開始以為是連線數與檔案控制程式碼的限制,但是修改了系統引數maxuproc(每使用者的最大程式限制)從2000到5000(系統當時實際使用的程式數小於1000個),使用者檔案控制程式碼限制ofiles(descriptors)從4000到5000,都沒有效果。
根據錯誤型別12,還是把問題定位在記憶體上面,檢視SGA大小,佔了45G,約系統總記憶體的70%,加上系統自身要消耗10%的記憶體,合計80%的記憶體,這部分記憶體是不能交換的,而OS的系統引數maxpin%正好預設是80%,修改maxpin%到90%,問題解決,所有的連線正常。
正常情況下,系統的記憶體分計算記憶體與非計算記憶體(如檔案系統cache),SGA與系統的這部分記憶體都屬於計算記憶體,在AIX的早期版本(如Aix 5.2),如果記憶體不夠,這部分記憶體是可以交換的,但是後期的版本,如Aix 5.3以後,因為large page的引進,這部分記憶體是長駐記憶體而不能交換的(不知道是進步還是退步)。所以,當這部分記憶體達到maxpin%的時候,就會發生記憶體不夠,如果超出,就會發生系統hang住,所有的連線都無法進入,我們的這個實際案例是幸運的,只是在臨界點附近顛簸,並沒有引起系統的癱瘓。
修改maxpin%是一個解決方法,但同時也要注意maxperm%,maxclient%與minperm%的正確設定,以及其它記憶體的使用,因為除了系統以及SGA之外,還有程式空間(程式使用記憶體,有一部分是可交換的,有一部分也是屬於系統級別,不可交換的),以及檔案系統Cache,設定lru_file_repage=0,可以保證在minperm%之上,優先交換非計算記憶體。
至於剛上線的時候是正常的,為什麼執行一段時間以後才不正常,可能是因為連線數的增加,導致系統消耗以及記憶體增加,慢慢的達到了臨界點。
--EOF--
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1384/viewspace-237977/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個 ExpressionChangedAfterItHasBeenCheckedError 錯誤的解決過程ExpressError
- Ocelot錯誤解決
- 複製錯誤案例分享(一)
- undefined reference to錯誤的解決方法Undefined
- Cocopods的升級錯誤解決
- ORA-12005 錯誤的解決
- SAXParseException的錯誤解決之二Exception
- 安裝wsl錯誤的一種解決辦法
- 解決 Python UnicodeEncodeError 錯誤PythonUnicodeError
- dbfread報錯ValueError錯誤解決方法Error
- 解決 ngrok 的 Domain 錯誤問題AI
- Qt報Multiple definition錯誤的解決QT
- 解決MySQL server has gone away錯誤的解決方案MySqlServerGo
- PbootCMS 404 錯誤解決方法boot
- Linux下錯誤解決方案Linux
- latex 錯誤以及解決方案
- HTTP 錯誤 500.19- Internal Server Error 錯誤解決方法HTTPServerError
- steam磁碟寫入錯誤怎麼解決 steam磁碟寫入錯誤解決方法大全
- 解決 eslint 的 Parsing error: Unexpected token 錯誤EsLintError
- Mac上搭建chromedriver的錯誤解決方法MacChrome
- standby新增檔案錯誤的解決方法
- nginx出現403錯誤的解決方法Nginx
- MYSQL中 TYPE=MyISAM 錯誤的解決方法MySql
- ORA-28000錯誤解決方案
- dedecms提示500錯誤解決方法
- PHP curl error 60 錯誤解決PHPError
- linux解決“XXX is not in the sudoers file”錯誤Linux
- 解決java.lang.NoSuchMethodError錯誤JavaError
- HTTP代理錯誤怎麼解決?HTTP
- 安裝vCenter Server出現1603錯誤的一種解決方法Server
- catalog is missing 10 attribute(s)錯誤的解決辦法一例
- TCP網路除錯助手提示錯誤:“1035:未知錯誤” 解決方案TCP除錯
- 印表機提示列印錯誤怎麼解決 印表機狀態錯誤的方法
- 被誤解的單一職責原則 - Joe
- 手勢識別中一些錯誤解決方法
- win10硬體錯誤117怎麼解決?win10硬體錯誤117的解決辦法Win10
- photoshop匯出png發生未知錯誤的解決方案,ps匯出發生未知錯誤怎麼解決
- 解決Gitlab的The remote end hung up unexpectedly錯誤GitlabREM
- mysqldump error1066 錯誤的解決辦法MySqlError