用Tomcat开发

时间:2009-12-02 18:04:49

标签: tomcat

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

有一段时间我使用TC HTML'manager'应用程序重新加载;这达到了一定程度,但一段时间后我不断收到OOM错误。冲浪表明TC在重新加载时会发生泄漏。此外,这是一个麻烦,每次编译后的额外步骤。

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

如果我使用'reloadable true'运行应用程序但不重新编译任何内容,或者使用'reloadable false',它将永远运行(并且VisualVM认为它在内存方面是正常的)。

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

干杯谢谢!


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

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

再次感谢。再一次,我无法相信SO有多么有用!

5 个答案:

答案 0 :(得分:0)

Tomcat类重新加载曾经是buggy - 而OOM就是其中的表现形式。 Jetty在这方面更可靠。

答案 1 :(得分:0)

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

实际上它是JRebel,它有望解决这个问题。我自己没有用过,所以我不能说声明的有效性,但我正在考虑......

答案 2 :(得分:0)

我们最终只在Tomcat中重新部署脚本 - 从源代码控制构建,关闭tomcat,从tomcat中删除陈旧文件,部署新war,重启tomcat,检查tomcat日志是否有错误。

否则我们会遇到内存问题。

答案 3 :(得分:0)

您的申请是否有任何特殊之处 - 例如启动自己的(非守护进程)线程,或使用这样做的库?至少在那种情况下你会泄漏。

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

答案 4 :(得分:0)

以下是如何使用JRebel和JSF http://przemek-nowak.pl/2010/10/jrebel-czyli-jak-przyspieszyc-prace-programisty/的示例,可能对某人有用。