我们的一个生产Tomcat盒子运行两个webapps。 一个是我们的,另一个是黑盒子的应用程序,我们的供应商提供“帮助”与我们的应用程序。
不幸的是,我们在生产环境中碰到了内存限制,我正在努力添加内存,让Tomcat从JVM的更多内存开始。 然而,在我这样做之前,我想看看这两个webapps中的哪一个正在吃掉所有的RAM!
在内置的Tomcatpipe理器中是否有一个选项显示webapp的内存使用情况? 如果没有,是否有免费的解决scheme,在某个地方提供这种级别的诊断可用性?
如果需要的话,我愿意写我自己的轻量级的webapp来完成它,并且有一台在另外两台机器上运行。
谢谢,
IVR复仇者
看一看来自MuleSoft的Tcat Server,它可以为您提供大量的内存利用率信息。 您可以在现有的Tomcat安装中使用它。
尝试使用JMX 。 启用它应该像将以下行添加到启动脚本一样简单:
JAVA_OPTS=$JAVA_OPTS:"-Dcom.sun.management.jmxremote.port=8090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
正如你所看到的,有encryption和身份validation的选项,以满足当地的偏执狂经理。
你没有提到你使用的监控系统; 你可能不得不设置,以便能够谈论JMX。 Zabbix有Zapcat ,下面是一些OpenNMS指令 ,这里是一个Nagios插件 。
不幸的是,我不认为有任何方法可以打破单个Web应用程序的RAM使用,甚至使用JMX。 但是,只是为了这个实验,你可以尝试在自己的Tomcat实例中运行每个Web应用程序。 然后测量每个单独的JVM的内存使用情况。
看看lamdaprobe这是一个小的web应用程序,甚至可以连接到JMX,并给你很多宝贵的信息: http : //www.devx.com/Java/Article/35659/1954
请注意,只有pipe理员才能访问此应用程序
Zenoss会让你看到运行tomcat的服务器,tomcat进程并通过JMX监视它。 有相当数量的文档,它是开源的。
你可以通过类和引用分解服务器内部的内存,但是这是有点技术性的。 只需在jmap或jconsole或jvisualvm或-XX:+ HeapDumpOnOutOfMemoryError的某个时间点进行堆转储。 然后用Eclipse MAT或JHat打开它。
那么如果你想要更多的监控: http : //javamelody.googlecode.com (内存图表和细分类包括)