2013-09-24 27 views
0

我在JSF 2.0應用程序中使用hibernate 4.2.4和c3p0 0.9.2.1。一切正常,但如果5個用戶立即在應用程序內部執行一些操作,它會在幾分鐘後凍結。同一容器內的其他應用程序(portlet)仍然可以訪問,CPU和RAM的使用情況正常。有幾個動作後,休眠和c3p0的JSF應用程序會凍結

也許c3p0連接池的所有連接都在使用中,並且在使用後不會被釋放?!但是,如果這是問題,我該如何檢查?

某些線程在stackoverflow.com上告訴使用unreturnedConnectionTimeoutdebugUnreturnedConnectionStackTraces。我是否必須將它像下面一樣放入我的hibernate.cfg.xml中?

<property name="com.mchange.v2.c3p0.unreturnedConnectionTimeout">5</property> 
<property name="com.mchange.v2.c3p0.debugUnreturnedConnectionStackTraces">true</property> 

我的hibernate.cfg.xml是:

<property name="current_session_context_class">thread</property> 

<property name="hibernate.c3p0.min_size">1</property> 
<property name="hibernate.c3p0.max_size">2</property> 
<property name="hibernate.c3p0.timeout">300</property> 
<property name="hibernate.c3p0.max_statements">0</property> 
<property name="hibernate.c3p0.idle_test_period">3000</property> 

回答

0

所以,第一件事:maxPoolSize的兩(hibernate.c3p0.max_size)是不是一個好主意。它應該「有效」,但如果您有任何重要的併發訪問,則會期待很多等待。

重新配置語法:它會更喜歡......

<property name="hibernate.c3p0.unreturnedConnectionTimeout">5</property> 
<property name="hibernate.c3p0.debugUnreturnedConnectionStackTraces">true</property> 

確認要通過在池初始化檢查配置轉儲(在INFO)獲得通過C3P0配置。

或者,在凍結期間使用JMX檢查池。

+0

「2」的max_size用於測試目的。通常我的應用程序運行20次。我不知道這是否是推薦的數字。我必須使用max_size嗎? – joverflow

+0

如何在初始化時啓用conifg dump?在tomcat啓動時,控制檯上的c3p0沒有輸出。 – joverflow

+0

在我的log4j應用程序日誌中發現了一些c3p0條目。所以你的建議工作! – joverflow