我正在寻找一种运行时解决方案,用于查找Web应用的内存使用情况。 我提供的框架包括tomcat,不同的客户端在其上部署了多个Web应用程序。有时其中一个消耗大量内存,从而破坏了整个过程。 我想有一个经理网络应用程序(如tomcat的经理)将检测到这一点,并可能取消部署\重新部署有问题的webapp。 另一个解决方案(我认为不可能)是分别为每个Web应用程序分配一个堆片。
要求客户更改现有的网络应用程序是可能的,但我宁愿不这样做。
有什么想法吗?
答案 0 :(得分:3)
您无法拦截每个webapp中的分配,并且垃圾收集器没有回调,因此您无法知道每个Web应用程序使用多少内存。我认为你最好部署几个Tomcat实例,这样一个“流氓”webapp就不会杀死所有其他的(每个webapp最多一个Tomcat,但你也可以创建组来限制实例数量,具体取决于批评您的不同应用程序)。
答案 1 :(得分:1)
Tomact作为单个java进程运行,因此很难为每个应用程序分配内存。您只能增加MaxPermSize,-Xmx。
您可以查看leak detector for Tomcat,但由于您无法更改其他应用的源代码,因此无法提供帮助。
答案 2 :(得分:0)
我认为您想要看的是VisualVM,这将为您提供JVM中Tomcats内存使用情况的概述。
http://techblog.zabuchy.net/2012/monitoring-of-tomcat-with-visualvm-and-visualgc/