2017-03-09 68 views
0

在我每次重新部署应用程序时,都会保留旧的webclassloader,因为存在由休眠启动的称为Timer-0的阻塞线程。 我试着用YourKit分析堆转储,但仍有几个thousend类仍在加载,我很难弄清楚什么是阻塞类加载器。清除Tomcat中Grails应用程序的取消部署

这给我留下了几个问题:

  • 如何查找类加载器无法卸载的原因是什么?

  • 是否有最佳做法来确保在不重新启动容器的情况下完全卸载所有内容?

在此先感谢!

UPDATE

样品数据源:

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

我已经使用Tomcat 7和Grails成功完成了并行部署。这就像没有任何停机时间的重新部署。 – Joe

+0

你如何做你的数据库连接池? – Joe

回答

0

也许最好的办法是前端有一个代理(Apache代理工作得很好)系统。您甚至可以在同一台计算机上安装两个Tomcat实例,但在不同的端口上可以说7001和8001.假设您目前正在端口7001上运行,您将在8001上启动新部署,然后将您的代理重新指定给8001.

相关问题