應用程序無法連接數據庫導致業務經常性中斷

問題描述:
   
有人反映業務經常性中斷,根據技術人員初步判斷是由於應用程序無法連接數據庫導致的。
    登錄數據庫查看日誌,發現日誌有如下錯誤信息:

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   -

   

如何預防

儘量不使用應用程序自動連接數據庫,對於應用程序訪問數據庫的連接會話要及時釋放。

對於應用程序和數據庫要進行性能監控,時刻關注其基本性能指標,有時候能防患於未然,將許多重大故障扼殺在萌芽之中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章