2016-03-05 50 views
1

我在Apache Tomcat 7上部署了一個Grails應用程序。上週由於空的線程池導致應用程序關閉,但沒有太多的用戶來做這件事。當我查看服務器時,發現端口8080上有很多未關閉的java線程和tcp進程 - 處於CLOSE_WAIT狀態。Grails應用程序中的許多持久CLOSE_WAIT連接

Screenshot of netstat for 8080 port

的應用與遠程MSSQL數據庫,並且還通過groovy.net.http.RestClient遠程CRM系統通信。作爲一個網絡服務器,我們使用Nginx。我查看了所有日誌(tomcat,nginx訪問日誌)並沒有意識到任何奇怪的活動。有沒有人在類似的技術上面臨這樣的問題?

Grails的版本是2.3.7

這裏有一個連接設置DB:

production { 
    dataSource { 
     // Production MS SQL database configuration 
     //pooled = true 
     driverClassName = "net.sourceforge.jtds.jdbc.Driver" 
     url = "jdbc:jtds:sqlserver://blahblahblah" 
     username = "username" 
     password = "password" 
     dbCreate = "none" 
     properties { 
      // See http://grails.org/doc/latest/guide/conf.html#dataSource for documentation 
      jmxEnabled = true 
      initialSize = 5 
      maxActive = 1250 
      minIdle = 20 
      maxIdle = 100 
      maxWait = 15000 
      maxAge = 10 * 60000 
      timeBetweenEvictionRunsMillis = 5000 
      minEvictableIdleTimeMillis = 60000 
      validationQuery = "SELECT 1" 
      validationQueryTimeout = 3 
      validationInterval = 15000 
      testOnBorrow = true 
      testWhileIdle = true 
      testOnReturn = false 
      jdbcInterceptors = "ConnectionState" 
      defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_UNCOMMITTED 
     } 
    } 
    } 

UPDATE

我發現了CLOSE_WAIT連接在同一時間發生的nginx的499錯誤 - 客戶端關閉請求。

+0

什麼版本的Grails?你可以把一個mssql連接代碼。它使用連接池嗎? – Arjang

+0

我更新了問題。 – sovanegger

回答

0

我沒有Grails 2項目了。我從來沒有見過這個錯誤。但我通常不使用jtds驅動程序。這是我使用的。

driverClassName: "com.mysql.jdbc.Driver" 
dialect: "org.hibernate.dialect.MySQL5InnoDBDialect" 
url: "jdbc:mysql://localhost/myroject?useUnicode=yes&characterEncoding=UTF-8" 

我記得以前我不得不下載DB驅動並將它添加到lib目錄。

+0

我發現CLOSE_WAIT連接與nginx 499錯誤 - 客戶端關閉請求同時發生。 – sovanegger