我们在Sun VM 1.5.0_06-b05上运行的Tomcat 5.5.17上部署的Web应用程序出现了一些减速,我们的托管公司没有提供足够的数据来查找问题。
我们正在考虑在生产服务器上安装lambda probe,但它需要启用JMX(com.sun.management.jmxremote)才能获取内存和CPU统计信息。
启用JMX会导致严重的性能损失吗?
如果我们启用JMX,我们是否会打开任何安全漏洞?如果我们只启用对JMX的本地访问,是否需要设置安全身份验证?
是否有人使用相同的(tomcat + lambda探针)在生产中没有问题?
看看答案似乎单独启用JMX不会给VM带来很大的开销。如果连接到VM的监视应用程序,无论是 JConsole , lambda探测器还是其他任何一个,都会以过度的奉献精神进行轮询,这可能会带来额外的工作。
答案 0 :(得分:17)
您可以使用安全身份验证来消除安全漏洞。只是保持JMX服务准备就绪不会产生任何重大开销,通常是一个好主意。有一个关于此的基准here。
答案 1 :(得分:6)
JMX的开销很低,您可以通过SSL和身份验证来修复安全性。设置-Dcom.sun.management.jmxremote.ssl = true和-Dcom.sun.management.jmxremote.authenticate = true
有关设置证书等的详细信息,请参阅此处here。
当您开始检测代码时,开销就成了问题。开销可能很大,并且检测可能会影响应用程序的行为。你不会看到你得到的东西,即所谓的heisenberg effect。
如果您想要低开销,我会使用JRockit附带的工具。他们捎带JVM一直收集的信息。 JVM会统计哪些方法运行最多,以确定应优化哪些方法。 JVM还会跟踪内存使用情况/模式,以决定选择哪种gc-stategy。 JRockit将这种类型的数据暴露给JRockit工具,而不会增加通常从单独的JMVTI - 代理获得的检测开销。
答案 2 :(得分:3)
JMX只是一个等待连接的套接字,允许外部进程访问收集的数据。惩罚通常是非常低的(当然,除非你用JMX服务器发出请求)。
JMX允许您了解Java VM的内容。有命令可以运行GC并将其关闭。也就是说,JMX提供了一种使用公钥和身份验证的安全连接模式。请阅读文档了解详情。
答案 3 :(得分:2)
我们在生产服务器中使用lambda探针,但我们没有看到任何重大开销。我可以推荐使用探针作为可靠的产品(Tomcats 5.5和6.0,JDK 5和JDK 6)。
答案 4 :(得分:0)
这取决于JMX实现以及您想要监控的内容有多昂贵。 我现在至少有一个JMX应用程序,它具有相对较高的内存开销。