我正在寻找如何让 tomcat CI 准备就绪的提示,或者一个经常重新部署的 servlet 容器/应用程序容器,就像它们在使用 hudson ci 时发生的那样。
我发现 Tomcat 6 没有正确取消部署 webapps,将类留在 jvm 中。
例如,我使用 VisualVM 监控 tomcat 6:在启动 2000 个类时,在重新部署 4000 个和重新部署 5000 个类之后部署应用程序 3000 个等等 - 导致崩溃、内存泄漏...
好的,希望有人对 tomcat 和持续集成或其他应用服务器有所提示。
最佳答案
更新:我使用 Spring、Hibernate、GWT、C3P0 和 HsqlDB 对一个中等复杂的 Web 应用程序执行了一些测试。
如果您使用客户端编译器,Stock Tomcat 6.0.24 工作正常。它适用于十次重新部署,而服务器编译器在第四次发生故障。我建议您尝试使用 -client
标志。
尝试调试服务器编译器的使用是徒劳的,因为 Eclipse MAT 没有显示类加载器的 GC 根,但它们被保留了下来。一个经常被引用的错误,PermHeap bloat in and only in server VM据报道已在 Java 6 更新 16 中修复,但我的测试在 Java 6 更新 16 中失败。
Tomcat 已经针对此类内存问题进行了反复检查,并且经常是应用程序的问题。不,这并不是说这样的 perm gen 泄漏一定很难。
这里有两种可能:
- 使用最新的 Tomcat 6.0.26,它最近具有内存泄漏检测功能:basic memory leak detection was added to the standard Host implementation and exposed via JMX to detect memory leaks on web application reload. (markt/kkolinko)
- 嵌入容器并使用每个应用程序一个容器的模型运行。 Tomcat、Jetty 和 Winstone 都非常适合这一点。
如果您真的想调试这个问题并确保它是 Tomcat 的错,您可以使用 Eclipse memory analyser .他们有一个很好的blog post explaining how to debug PermGen problems .
关于tomcat - Tomcat 6 是否已准备好进行持续集成或如何让它工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2436424/