Java 如何在tomcat中管理webapps足迹?

Java 如何在tomcat中管理webapps足迹?,java,tomcat,memory-management,out-of-memory,Java,Tomcat,Memory Management,Out Of Memory,我正在寻找一个运行时解决方案,用于查找web应用程序的内存使用情况。 我提供了一个包含tomcat的框架,不同的客户端在该框架上部署了多个web应用程序。有时其中一个会消耗大量内存,从而破坏整个过程。 我希望有一个像tomcat的manager这样的manager web应用程序,可以检测到这一点,并可能取消部署\重新部署有问题的web应用程序。 另一个我认为不可能的解决方案是将堆的一部分分别分配给每个web应用程序 要求客户端更改现有的web应用程序是可能的,但我宁愿不这样做 有什么想法吗?我

我正在寻找一个运行时解决方案,用于查找web应用程序的内存使用情况。 我提供了一个包含tomcat的框架,不同的客户端在该框架上部署了多个web应用程序。有时其中一个会消耗大量内存,从而破坏整个过程。 我希望有一个像tomcat的manager这样的manager web应用程序,可以检测到这一点,并可能取消部署\重新部署有问题的web应用程序。 另一个我认为不可能的解决方案是将堆的一部分分别分配给每个web应用程序

要求客户端更改现有的web应用程序是可能的,但我宁愿不这样做


有什么想法吗?

我认为您想看的是VisualVM,这将为您提供JVM中Tomcats内存使用的概述


我认为您想看的是VisualVM,这将为您提供JVM中Tomcats内存使用的概述


Tomact作为单个java进程运行,因此很难为每个应用程序分配内存。你只能增加


您可以检查,但这几乎没有帮助,因为您无法更改其他应用程序的源代码。

Tomact作为单个java进程运行,因此很难为每个应用程序分配内存。你只能增加


您可以检查,但这几乎没有帮助,因为您无法更改其他应用程序的源代码。

您无法拦截每个Web应用程序中的分配,并且没有来自垃圾收集器的回调,因此您无法知道每个Web应用程序使用了多少内存。我认为您最好部署几个Tomcat实例,这样一个恶意Web应用程序就不会杀死所有其他的Tomcat,每个Web应用程序最多只能杀死一个Tomcat,但您也可以创建组来限制实例的数量,这取决于您不同应用程序的关键性。

您不能截获每个Web应用程序中的分配,而且没有来自垃圾收集器的回调,因此您无法知道每个webapp使用了多少内存。我认为您最好部署几个Tomcat实例,这样一个恶意Web应用程序就不会杀死所有其他的Tomcat,每个Web应用程序最多一个Tomcat,但您也可以创建组来限制实例的数量,取决于不同应用程序的关键性。

为什么不在单独的tomcat实例中运行每个应用程序,这样恶意应用程序就不会影响其他应用程序?您可以运行apache作为这些单独tomcat实例的代理。在我的tomcat上有6个webapps,我们无法减轻6个新进程的开销。然后部署2个tomcat,每个进程部署3个webapps,或者部署3个tomcat,每个进程部署2个webapps,或者部署其他组合。无论如何,情况会好一些。为什么不在一个单独的tomcat实例中运行每个实例,这样恶意应用程序就不会影响其他应用程序呢?您可以运行apache作为这些单独tomcat实例的代理。在我的tomcat上有6个webapps,我们无法减轻6个新进程的开销。然后部署2个tomcat,每个进程部署3个webapps,或者部署3个tomcat,每个进程部署2个webapps,或者部署其他组合。无论如何情况会更好。我可以更改代码,我只是不想。。。泄漏检测器无法解决此问题,因为1。它是静态的,我需要一个运行时的解决方案,2。它正在查看perm内存,我的堆很短。然后我想您可以使用tomcat进行评测并修复问题。如果你认为这是不可能的,那么在固定的持续时间后重新启动tomcat:我可以更改代码,我只是不想。。。泄漏检测器无法解决此问题,因为1。它是静态的,我需要一个运行时的解决方案,2。它正在查看perm内存,我的堆很短。然后我想您可以使用tomcat进行评测并修复问题。如果您认为这是一个长期问题,那么只需在固定的持续时间后重新启动tomcat即可: