2013-03-11 39 views
0

我有一個在Tomcat 7下運行的Grails應用程序,並且在管理MySQL連接時遇到問題。Grails/Tomcat:數據庫連接陷入睡眠狀態

問題是,每個對應用程序的新請求(即頁面加載)都會創建一個新的MySQL連接,並且這些連接不會關閉。相反,他們保持睡眠狀態,直到MySQL服務器最終拒絕接受更多連接。因此,只需通過快速重新加載網站上的各個頁面,就可以創建大量的數據庫連接。

所以看來我的連接池並沒有足夠快地關閉與MySQL的連接。連接池有許多配置設置,但我不確定需要調整什麼來避免此問題。

這裏是我的context.xml文件配置:

 <Resource name="jdbc/Production" auth="Container" type="javax.sql.DataSource" 
      maxActive="100" 
      maxIdle="30" 
      maxWait="10000" 
      minEvictableIdleTimeMillis="1800000" 
      timeBetweenEvictionRunsMillis="1800000" 
      numTestsPerEvictionRun="3" 
      removeAbandoned="true" 
      removeAbandonedTimeout="60" 
      logAbandoned="true" 
      testOnBorrow="true" 
      testWhileIdle="true" 
      testOnReturn="true" 
      validationQuery="SELECT 1" 
      username="" 
      password="" 
      driverClassName="com.mysql.jdbc.Driver" 
      url="jdbc:mysql://localhost/Production" 
    /> 

非常感謝您的任何建議。

回答

1

您沒有定義連接池。

添加以下代碼context.xml中(這似乎是一個JNDI數據源):

pooled = "true" 
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 

如果你還沒有把JDBC池到您的依賴的配置,添加以下的plugins關閉在BuildConfig.groovy中:

compile ":jdbc-pool:1.0.9.3" 

您可以使用其他連接池,但JDBC Pool將是我的建議。

+0

我試着按照你的建議添加JDBC Pool插件。但是,我仍然看到相同的行爲,當網站上的任何頁面刷新得非常快時,會創建多個MySQL連接。 連接最終會消失,但只有在服務器上的負載增加到非常高以致無法使用時纔會消失。 對於如何調試此行爲,您有任何建議嗎? – user2156803 2013-03-12 10:29:30

+0

@ user2156803你能告訴我堆棧跟蹤消息嗎? – coderLMN 2013-03-12 14:36:18