目前,每次我重新部署应用程序时,旧的 webclassloader 都会被保留,因为我认为这是一个名为 Timer-0 的阻塞线程,它是由 hibernate 启动的。 我尝试使用 YourKit 分析堆转储,但仍然加载了数以千计的类,我很难找出是什么阻止了类加载器。
这留给我几个问题:
如何查找类加载器无法卸载的原因?
是否有最佳实践来确保在不重启容器的情况下完全卸载所有内容?
提前致谢!
更新
示例数据源:
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
}
}
最佳答案
最好的方法可能是使用代理作为系统前端(Apache 代理运行良好)。你甚至可以在同一台机器上有两个 Tomcat 实例,但在不同的端口上,假设 7001 和 8001。假设你当前正在端口 7001 上运行,你在 8001 上开始新部署,然后将你的代理重新指向 8001。
关于tomcat - 在 Tomcat 中完全取消部署 Grails 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42696292/