標籤:blog http io os 使用 ar java for strong
在項目中碰到了一個應用異常,從表象來看應用僵死。查看Weblogic狀態為Running,記憶體無溢出,但是出現多次線程堵塞。查看Weblogic日誌,發現程式出現多次Time Out。
我們知道,Weblogic會自動檢測線程運行逾時,當超過特點時間(預設600S),即認為此線程為堵塞線程。在日誌中發現多次堵塞線程,通過尋找資料,發現Weblogic在發生多次線程堵塞後,會自動把應用掛起。預設次數為15次。
是什麼造成了線程堵塞呢?通過進一步分析日誌,我們發現線上程堵塞之前,發生了多次java.sql.SQLRecoverableException: Closed Connection異常。異常情況:
從表現來看是資料庫連接出了異常。我們對資料庫和網路進行了分析,確定資料庫和網路都無異常。我們的另外一個應用在Weblogic運行沒有類似問題。
最後在Oracle的論壇上找到了問題的根結,由於我們的應用是自己開發的資料庫連接池,應用和資料庫之間有一層防火牆。防火牆策略是對於1800s未使用的Socket串連將自動關閉。Oracle的日誌中也發現Socket異常關閉的異常。我們對應用進行了調整,當串連池中的串連15分鐘不用時,自動回收,問題解決。
http://blog.csdn.net/gavinloo/article/details/12206763
JDK1.6:
java.sql
Interface Statement:
setQueryTimeout
void setQueryTimeout(int seconds) throws SQLException
-
Sets the number of seconds the driver will wait for a
Statement
object to execute to the given number of seconds. If the limit is exceeded, an
SQLException
is thrown. A JDBC driver must apply this limit to the
execute
,
executeQuery
and
executeUpdate
methods. JDBC driver implementations may also apply this limit to
ResultSet
methods (consult your driver vendor documentation for details).
-
-
-
Parameters:
-
seconds
- the new query timeout limit in seconds; zero means there is no limit
-
Throws:
-
SQLException
- if a database access error occurs, this method is called on a closed
Statement
or the condition seconds >= 0 is not satisfied
-
See Also:
-
getQueryTimeout()
-
關於java.sql.SQLRecoverableException: Closed Connection異常的解決方案(轉)