有人反映業務經常性中斷,根據技術人員初步判斷是由於應用程序無法連接數據庫導致的。
登錄數據庫查看日誌,發現日誌有如下錯誤信息:
02-SEP-2012 14:23:25 * (CONNECT_DATA=(SID=ora10g)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))) * (ADDRESS=(PROTOCOL=tcp)(HOST=*.*.*.*)(PORT=2024)) * establish * ora10g * 12518
TNS-12518: TNS:listener could not hand off client connection
TNS-12549: TNS perating system resource quota exceeded
TNS-12560: TNS rotocol adapter error
TNS-00519: Operating system resource quota exceeded
HPUX Error: 12: Not enough space
······
kkjcre1p: unable to spawn jobq slave process
Thu Dec 27 13:34:15 2012
Errors in file /oracle/app/oracle/admin/ora10g/bdump/ora10g_cjq0_2922.trc:
Thu Dec 27 13:34:20 2012
Process startup failed, error stack:
如何分析:1. 檢查cpu佔用資源
top cpu空閒率90%多,沒有相關oracle進程佔用cpu資源
procs memory page
faults cpu
r b w avm free re at pi po fr de sr in
sy cs us sy id
1 1 0 190706 25014 0 0 0 0 0 0 0 9422
573 4068 5 1 94
1 1 0 190706 24897 0 0 0 0 0 0 0 3686
721 379 8 0 92
2 1 0 179575 24897 0 0 0 0 0 0 0 3681
852 379 8 0 92
2 1 0 179575 24896 0 0 0 0 0 0 0 3682
149 381 8 0 91
2 1 0 179575 24896 0 0 0 0 0 0 0 3777
240 454 8 0 92
2 1 0 179575 24898 0 0 0 0 0 0 0 3662
492 343 0 0 100
2 1 0 179575 24898 0 0 0 0 0 0 0 3578
100 262 0 0 100
1 0 0 196811 24898 0 0 0 0 0 0 0 3539
758 212 0 0 100
1 0 0 196811 24897 0 0 0 0 0 0 0 3499
193 180 1 0 99
1 0 0 196811 24897 0 0 0 0 0 0 0 3475
274 165 8 0 92
2. 檢查物理內存和交換分區使用情況
rx8640a:[/var/adm/syslog]#swapinfo -atm
Mb Mb Mb PCT START/ Mb
TYPE AVAIL USED FREE USED LIMIT RESERVE PRI NAME
dev 20480 342 20138 2% 0 - 1 /dev/vg00/lvol2
reserve - 20138 -20138
memory 23251 23164 87 100%
total 43731 43644 87 100% - 0 -
可以看到物理內存全部用完,交換分區只佔用2%。
3. 檢查操作系統日誌
dmesg
Pid 21214 was killed due to failure in writing the signal context - possible stack overflow.
Deferred swap reservation failure pid: 21910
Deferred swap reservation failure pid: 21908
Deferred swap reservation failure pid: 21912
Deferred swap reservation failure pid: 21912
Deferred swap reservation failure pid: 21912
Deferred swap reservation failure pid: 21909
報很多進程ID失敗的信息
4. 查看數據庫連接數
su - oracle
ps -ef|grep LOCAL|wc -l
924 諮詢庫開發人員,這個連接數正常。
5. 檢查操作系統進程連接參數
sam
kernel configure
maxuprc 1500
連接數沒有超過進程連接參數值
解決方法1.重啓操作系統和重啓數據庫
2.啓動數據庫後,應用訪問正常,但連接數又突然增加到920
su - oracle
ps -ef|grep LOCAL|wc -l
920
通過glance工具,發現每個LOCAL=NO的進程平均佔用20多M
PROCESS LIST Users= 3
User CPU % Thrd Disk Memory Block
Process Name PID Name (1200% max) Cnt IOrate RSS/VSS On
--------------------------------------------------------------------------------
ora_j001_ora 13731 oracle 41.9 1 334.2 685.4mb 701.9mb IO
glance 13896 root 3.0 1 0.0 2.7mb 8.2mb STRMS
vxfsd 133 root 2.7 16 1.1 1.6mb 1.8mb SLEEP
midaemon 1975 root 0.0 8 0.0 263.4mb 268.1mb SLEEP
oracleora10g 4581 oracle 0.0 1 0.0 21.3mb 28.3mb SOCKT
oracleora10g 4687 oracle 0.0 1 0.0 22.3mb 25.3mb SOCKT
oracleora10g 4983 oracle 0.0 1 0.0 23.4mb 24.3mb SOCKT
oracleora10g 4482 oracle 0.0 1 0.0 25.2mb 27.2mb SOCKT
oracleora10g 4482 oracle 0.0 1 0.0 26.4mb 29.5mb SOCKT
oracleora10g 4482 oracle 0.0 1 0.0 27.5mb 32.3mb SOCKT7
ora_cjq0_ora 13704 oracle 0.0 1 0.0 656.1mb 695.5mb OTHER
C - cum/interval toggle Page 1 of 2
大概估算下,900多個連接數大概佔用物理18000M,根據swapinfo –atm
命令查看物理內存已經使用91%,一旦到100%,外面應用可能又無法連接。
繼續分析進程ID,查到大部分是由機器名爲db的應用連進來,狀態爲inactive,
[url=]sql[/url]全部爲select 1 from dual;
但這時不知道hzdb機器的ip地址,和用戶一起協商,
把數據庫啓動後的這段時間根據listener.log全部列舉出來,
主要是由以下三個ip連接進來:
19192.168.0.55,192.168.0.213,192.168.3.26
用戶感覺192.168.0.55 ip有問題,通過溝通,確認是這個IP引起。
臨時解決方法:把192.168.0.55應用連接到數據庫用戶鎖住。
3. 用戶鎖住後,重起數據庫 物理內存佔用66%應用恢復正常
rx8640a:[/opt]#swapinfo -atm
Mb Mb Mb PCT START/ Mb
TYPE AVAIL USED FREE USED LIMIT RESERVE PRI NAME
dev 20480 0 20480 0% 0 - 1 /dev/vg00/lvol2
reserve - 13238 -13238
memory 23251 15413 7838 66%
total 43731 28651 15080 66% - 0 -
如何預防
儘量不使用應用程序自動連接數據庫,對於應用程序訪問數據庫的連接會話要及時釋放。
對於應用程序和數據庫要進行性能監控,時刻關注其基本性能指標,有時候能防患於未然,將許多重大故障扼殺在萌芽之中。