每次我重新部署一个应用程序时,由于一个名为Timer-0的阻塞线程由hibernate启动,所以我保留旧的webclassloader。 我尝试使用YourKit分析堆转储,但仍然加载了几个thousend类,我很难弄清楚什么阻止了类加载器。
这给我留下了几个问题:
如何找到类加载器无法卸载的原因?
是否有最佳做法确保在不重新启动容器的情况下完全卸载所有内容?
提前致谢!
更新
示例数据源:
dataSource {
pooled = true
driverClassName = "org.postgresql.Driver"
dialect = "org.hibernate.dialect.PostgreSQLDialect"
username = "xx"
password = "xx"
configClass = DdlFilterConfiguration
properties {
maxActive = 250
maxIdle = 25
minIdle = 1
initialSize = 10
maxWait = 10000
validationQuery = "select 1 "
validationQueryTimeout = 3
validationInterval = 15000
testOnReturn = true
testWhileIdle = true
testOnBorrow = true
minEvictableIdleTimeMillis = 60000
timeBetweenEvictionRunsMillis = 5000
}
}
答案 0 :(得分:0)
可能最好的方法是使用代理前端系统(Apache代理很好)。即使在同一台机器上也可以有两个Tomcat实例,但在不同的端口上可以说7001和8001.让我们假设您当前在端口7001上运行,您在8001上开始新部署,然后将您的代理重新命名为8001。