在tomcat服务器上运行应用程序有什么问题?

时间:2009-12-07 05:27:28

标签: java tomcat netbeans permgen

最近我创建了一个基于maven的web项目,并使用tomcat作为应用程序服务器进行调试...

但是直接从项目上下文菜单运行应用程序后,tomcat经常死机(pergem错误,这意味着没有memery)。

最糟糕的是它创建了许多空闲线程并且它们都不能被手动杀死。

而且tomcat状态也是NetBeans无法检测到的,它无法停止并重启。 我必须重新启动系统才能清理它们。

我的系统是Fedora 12 x86 ...... Java版本是SUN JDK 6 update 17。 NetBeans verison是6.7.1。

我试图创建一个关于此的错误,但NetBeans开发人员拒绝了它...我很惊讶这是使用NetBeans开发Web应用程序的一个很大的障碍。

今天我在最新的NetBeans 6.8rc1中使用了JBoss 5.1,也遇到了同样的问题...... 我已经尝试调整VM参数并分配更多内存但没有效果。

我已经通过seam ant构建脚本向JBoss 5.1部署了几个接缝样本,没有问题。 但我转而使用NetBeans来执行此操作,由于内存不足而失败。

有什么问题????

1 个答案:

答案 0 :(得分:4)

(我假设您所讨论的空闲线程是应用程序线程。如果您正在讨论Tomcat的工作线程,那么它们不应该在空闲时导致permgen问题。)

  

我试图创建一个关于此的错误,但NetBeans开发人员拒绝了它......我非常惊讶......

我并不惊讶。这不是一个真正的NetBeans问题。它甚至不是Tomcat或JBoss的问题。

空闲/孤立应用程序线程的问题是您无法安全地杀死正在运行的JVM中的线程。如果没有能力这样做,你就无法阻止(在这种情况下)permgen空间的泄漏。这本质上是一个Java平台问题。它只能在JVM支持JSR 121定义的隔离机制时解决。

但假设您的问题与进行热部署有关,那么您不必担心空闲的应用程序线程。如果您正在重新部署 任何类的任何可执行实例,则会导致原始的旧类加载器及其加载的所有类仍然可以访问。

  

...这是使用NetBeans开发Web应用程序的一个很大的障碍。

解决方案是不时地重新启动Web容器。这将清除闲置的螺纹和其他残留并释放泄漏的permgen空间。你可以通过运行更大的堆和更多的permgen来改善它,但你不能让它消失,特别是如果一些孤立的线程没有空闲...

哦,是的,不要成为一个大婴儿!这不是一个节目塞,它只是一个小小的不便:-)