2009-12-02 51 views
1

我在“开发模式”下运行TC 6,例如。应用程序类正在不断变化,我想用最少的麻烦看到最新的版本。用Tomcat开发

有段时间我使用TC HTML'manager'应用程序来重新加载;这起到了一定的作用,但一段时间后我一直在收到OOM错误。冲浪表明,这种方式重新加载时,TC有泄漏。再加上这是一个麻烦,每次编译后的额外步骤。

所以我切换到在context.xml文件中设置'reloadable true'。这可以达到一定程度,并且不需要任何额外的步骤,但是我又一次遇到了OOM错误(不太频繁,但仍然每天很多次)。更多的冲浪表明,这里也可能存在TC泄漏。

如果我使用'reloadable true'运行应用程序,但不重新编译任何内容或使用'reloadable false',它将永远运行(并且VisualVM认为它可以正确记忆)。

所以我有种感觉,每次我重新编译一个类时我应该完全重启TC。这是一个巨大的痛苦,但也许比随机的周期性OOM崩溃更好。只是想知道是否有人有更好的想法。也许我应该尝试一个不同的容器。

干杯和谢谢!


非常感谢回复。 JRebel看起来像一个伟大的计划,我会尝试;它似乎是专门为解决这个问题而设计的,这表明我没有做到这一点,而且它足够便宜,如果这是一个骗局,没有什么大不了的。

该应用程序通过ConnectorJ执行一些简单的标准MySQL调用,以及默认的开箱即用内存分配。坦率地说,虽然我没有看到这些事情是如何相关的,因为只要没有重新加载,应用程序就可以正常工作。

再次感谢。再一次,我不敢相信这是多么有用!

+0

您可以发布您正在使用的JVM内存设置吗? – StevenWilkins 2009-12-02 18:10:13

回答

0

Tomcat类重装曾经是buggy - 而OOM就是这种表现。 Jetty在这方面更可靠。

0

您可能会感兴趣这个question。我记得在这里看到一个问题,建议使用jRockit来解决这个问题,但我不记得在哪里......当我找到它时,我会搜索并更新这个答案。

其实它是JRebel它承诺解决这个问题。我没有使用它自己,所以我不能说这是多么有效的索赔,但我正在考虑它...

0

我们结束了脚本重新部署在Tomcat - 从源代码控制生成,关闭tomcat,从tomcat中删除陈旧的文件,部署新的战争,重新启动tomcat,检查tomcat日志是否有错误。

否则,我们得到了内存问题。

0

你有什么特别的应用程序 - 例如开始你自己的(非守护进程)线程,或者使用这样做的库?至少在这种情况下你会得到泄漏。

我正在开发使用eclipse,由tomcat通过eclipse进行开发管理。每次编译后,Tomcat会自动重新加载应用程序 - 我还没有经历任何内存增长或泄漏,也没有设置用于针对远程tomcat devel服务器进行开发 - 从蚂蚁脚本部署应用程序。当我开始使用java.util.concurrent.Executors时(它默认情况下)创建非守护进程线程,它确实泄漏了。