Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在tomcat服务器上运行应用程序有什么问题?_Java_Tomcat_Netbeans_Permgen - Fatal编程技术网

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

Java 在tomcat服务器上运行应用程序有什么问题?,java,tomcat,netbeans,permgen,Java,Tomcat,Netbeans,Permgen,最近,我创建了一个基于maven的web项目,并使用tomcat作为应用程序服务器来调试 但在直接从项目上下文菜单运行应用程序后,tomcat经常会死机(pergem错误,意思是内存不足) 最糟糕的是,它创建了许多空闲线程,这些线程都无法手动终止 而tomcat的状态也是NetBeans无法检测到的,它不能停止和重新启动。 我必须重新启动系统来清理它们 我的系统是Fedora12x86。。。 Java版本是SUN JDK 6 update 17。 NetBeans verison是6.7.1 我

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

但在直接从项目上下文菜单运行应用程序后,tomcat经常会死机(pergem错误,意思是内存不足)

最糟糕的是,它创建了许多空闲线程,这些线程都无法手动终止

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

我的系统是Fedora12x86。。。 Java版本是SUN JDK 6 update 17。 NetBeans verison是6.7.1

我试图对此创建一个bug,但NetBeans开发人员拒绝了它。。。我很惊讶,这是一个很大的阻碍使用NetBeans开发web应用程序

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

我已经通过seam ant构建脚本将几个seam示例部署到JBoss 5.1中,没有问题。 但我切换到使用NetBeans来做这件事,它失败了,因为内存不足

有什么不对??

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

我试图对此创建一个bug,但NetBeans开发人员拒绝了它。。。我很惊讶

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

空闲/孤立的应用程序线程的问题是,在运行的JVM中无法安全地终止线程。如果没有这样做的能力,你就无法阻止永磁发电机空间的泄漏。这本质上是一个Java平台问题。只有当JVM支持JSR121定义的隔离机制时,才能解决这个问题

但是假设您的问题与热部署有关,那么您需要担心的不仅仅是空闲的应用程序线程。如果您正在重新部署的任何类存在任何可访问的实例,则将导致原始旧类装入器及其加载的所有类保持可访问

。。。这是使用NetBeans开发web应用程序的一大障碍

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

哦,是的,别像个大婴儿!这不是一个限制,只是一个小小的不便:-)

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

我试图对此创建一个bug,但NetBeans开发人员拒绝了它。。。我很惊讶

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

空闲/孤立的应用程序线程的问题是,在运行的JVM中无法安全地终止线程。如果没有这样做的能力,你就无法阻止永磁发电机空间的泄漏。这本质上是一个Java平台问题。只有当JVM支持JSR121定义的隔离机制时,才能解决这个问题

但是假设您的问题与热部署有关,那么您需要担心的不仅仅是空闲的应用程序线程。如果您正在重新部署的任何类存在任何可访问的实例,则将导致原始旧类装入器及其加载的所有类保持可访问

。。。这是使用NetBeans开发web应用程序的一大障碍

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


哦,是的,别像个大婴儿!这不是一个表演的障碍,只是一个小小的不便:-)

您尝试过调整VM参数,但成功了吗?尝试调用Runtime.getRuntime().maxMemory(),并查看您的设置是否已计入帐户检查JRebel是否支持您当前的配置,也许它可以解决您的问题:Runtime.getRuntime().maxMemory()与此无关。PermGen空间用于保存不太可能被GC保存的代码和相关数据。在反复取消部署和重新部署的开发条件下的web容器是一个特例,因此您需要分配更多PermGen(特别是!),或者需要启用类的GC。您尝试调整VM参数,但成功了吗?尝试调用Runtime.getRuntime().maxMemory(),并查看您的设置是否已计入帐户检查JRebel是否支持您当前的配置,也许它可以解决您的问题:Runtime.getRuntime().maxMemory()与此无关。PermGen空间用于保存不太可能被GC保存的代码和相关数据。在反复取消部署和重新部署的开发条件下,web容器是一个特例,因此您要么需要分配更多的PermGen(特别是!),要么需要启用类的GC。虽然我一般同意您的说法,但这与空闲线程没有什么关系。相反,它与默认情况下不被垃圾收集的类有关。如果您真的想为额外的GC工作付出代价,可以启用类的垃圾收集。一般来说,您不希望在生产服务器中执行此操作,就个人而言,我更希望不时重新启动Tomcat(并将max permgen space设置为高)