應用長時間未呼叫後再次呼叫出現hang的情況

bisal發表於2013-10-23

        之前某應用就存在長時間不呼叫,再次呼叫時處於hang,等待10分鐘返回3113的連線錯誤。今天正好同事也問了個相同的問題,也是應用長時間不呼叫就出現這種情況。

        以前對於這種問題進行過排查,但一直未解決,針對今天的這個系統的問題,還是按照老方法檢查,

1. 檢查應用日誌,確實長時間等待後報3113的錯誤。

2. 檢查資料庫的PROFILE中idle_time引數,此處設定的是DEFAULT的UNLIMITED,說明超時不會是由資料庫使用者PROFILE配置導致的。

3. 檢查網路環境,因為這個應用是從一個網段訪問另一個網段的資料庫,諮詢網路中心後,中間有一個防火牆,確實也有超時的設定,是40分鐘,也就是應用連線空閒40分鐘後,就會自動kill連線。

        問題找到了,為了解決這個問題,其實方法也有很多:

1. 寫個指令碼定時調這個應用,保證40分鐘內有呼叫,就不會出現超時的問題了。

2. 通過Oracle的一些機制自動探測資料庫連線來間接保證40分鐘內應用有呼叫。

這篇文章介紹的DCD就是一種比較不錯的方法:http://sundog315.itpub.net/post/308/530331

另外老熊也有一篇非常好的文章推薦:http://www.laoxiong.net/oracle_and_firewall.html。

都是值得反覆玩味體會的。

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

相關文章