我已经在Apache Tomcat 7上部署了一个Grails应用程序。上周,由于空线程池,应用程序出现故障,但没有那么多用户可以做到这一点。当我查看服务器时,我发现端口8080上有很多java线程和tcp进程没有关闭 - 处于状态CLOSE_WAIT。
Screenshot of netstat for 8080 port
应用程序通过groovy.net.http.RestClient与远程MSSQL数据库以及远程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
}
}
}
更新
我发现CLOSE_WAIT连接与nginx 499错误同时出现 - 客户端关闭请求。
答案 0 :(得分:0)
我不再拥有Grails 2项目了。我从未见过这个错误。但我通常不会使用jtds驱动程序。这是我用的。
driverClassName: "com.mysql.jdbc.Driver"
dialect: "org.hibernate.dialect.MySQL5InnoDBDialect"
url: "jdbc:mysql://localhost/myroject?useUnicode=yes&characterEncoding=UTF-8"
我记得在过去我必须下载数据库驱动程序并将其添加到lib目录。