代码之家  ›  专栏  ›  技术社区  ›  Martin

使用Teamcity时,Tomcat重新部署失败

  •  1
  • Martin  · 技术社区  · 16 年前

    我试图设置Teamcity以便它在每次部署时都重新启动Tomcat,但后来我遇到了另一个问题——当从ant调用Tomcat时,Tomcat启动脚本只是挂起(即它很好地启动了Tomcat,但在构建过程中不会再进一步)。

    有人有类似的Teamcity Tomcat装置吗?

    3 回复  |  直到 16 年前
        1
  •  1
  •   Community CDub    8 年前

    这是tomcat的一个问题,类加载器和类没有被正确地垃圾回收。每次重新加载webapp上下文时,都会加载这些类的更多副本,由于这些类存储在永久堆生成中,因此最终会耗尽内存。

    increase the PermGen size 在tomcat启动时,这只允许您在内存不足的情况下重新部署deloy,这不是一个真正的修复,但您可以增加部署的数量,直到您必须重新启动。

        2
  •  0
  •   Dan Vinton    16 年前

    我们遇到了完全相同的问题,正如markrobinson指出的,这与类没有得到垃圾回收有关。

    我们遇到的特殊问题是加载了很多静态的东西:log4j、填充在静态全局变量中的spring上下文,以及其他创建静态实例或单例实例的类库。

    可以使用探查器跟踪其中的许多,然后在servlet的 destroy() 方法。虽然这并没有完全解决问题,但确实减轻了一些问题。

    最后,我们添加了一对额外的ant目标来停止和启动Tomcat,并将构建过程封装在这些目标中。基督教青年会。

        3
  •  0
  •   Brian Kelly    14 年前

    我想这个问题并不是TeamCity特有的。

    如何从Ant调用Tomcat启动脚本?

    如果使用的是“exec”任务,则可能需要将“spawn”属性设置为true,以便它在另一个进程中生成Tomcat。否则,Ant将等待进程结束,然后再继续。

    在我们的部署中,我们有一个脚本,它检查permgen级别,如果permgen太高(可选)重新启动Tomcat。