我们的一个生产 Tomcat 盒子运行两个 web 应用程序。一个是我们的,另一个是我们的供应商提供的黑盒应用程序,用于“帮助”我们的应用程序。
不幸的是,我们在生产机器上遇到了内存限制,我正在努力添加 RAM 并让 Tomcat 开始时为 JVM 提供更多可用内存。然而,在我这样做之前,我想看看这两个 web 应用程序中的哪一个占用了所有的 RAM!
内置 Tomcat 管理器中是否有一个选项可以显示 webapp 的 RAM 使用情况?如果没有,是否有免费的解决方案可以提供这种级别的诊断可用性?
如果需要,我愿意编写自己的轻量级 web 应用程序来完成它,并让一个在监视另外两个的机器上运行。
谢谢,
IVR 复仇者
尝试使用JMX。启用它应该像在启动脚本中添加以下行一样简单:
如您所见,有一些加密和身份验证选项可以满足您当地的偏执狂经理的需求。
你没有提到你正在使用什么监控系统;您可能还必须设置它才能与 JMX 通话。Zabbix 有Zapcat,这里有一些OpenNMS 指令,这里有一个Nagios 插件。
看看 MuleSoft 的 Tcat Server,它可以为您提供大量有关内存利用率的信息。您可以将它与现有的 Tomcat 安装一起使用。
不幸的是,我认为没有任何方法可以分解单个 Web 应用程序的 RAM 使用情况,即使使用 JMX 也是如此。然而,就这个实验而言,您可以尝试在其自己的 Tomcat 实例中运行每个 Web 应用程序。然后测量每个单独的 JVM 的内存使用情况。
看看 lamdaprobe,它是一个小型 Web 应用程序,它甚至可以连接到 JMX 并为您提供许多有价值的信息: http: //www.devx.com/Java/Article/35659/1954
请注意,此应用程序的访问权限应仅授予管理员
Zenoss 将让您监视运行 tomcat 的服务器、tomcat 进程并通过 JMX 对其进行监控。有相当多的文档并且它是开源的。
您可以通过类和引用来分解服务器内部的内存,但这有点技术性。只需在某个时间点使用 jmap 或 jconsole 或 jvisualvm 或 -XX:+HeapDumpOnOutOfMemoryError 进行堆转储。然后用 Eclipse MAT 或 JHat 打开它。
然后,如果您想要更多监控: http: //javamelody.googlecode.com(包括内存图表和分类分类)