在生产服务器上启用jmx(lambda探针)是一个好主意吗?

25

我们的Web应用程序在运行Tomcat 5.5.17和Sun VM 1.5.0_06-b05上时出现了一些减速问题,但我们的托管公司没有提供足够的数据来找到问题。

我们考虑在生产服务器上安装lambda probe,但这需要启用JMX(com.sun.management.jmxremote)以获取内存和CPU统计信息。

启用JMX会导致严重的性能损失吗?

如果我们启用JMX,是否会开放任何安全漏洞?如果我们只启用本地访问JMX,是否需要设置安全身份验证?

有人在生产中使用相同的(tomcat + lambda probe)而没有遇到问题吗?

更新

从答案中看来,仅启用JMX并不会对VM造成显著的额外负担。额外的工作可能来自于连接到VM的监视应用程序,无论是JConsolelambda probe还是其他应用程序,如果它们过度轮询,则可能会带来额外的负担。

5个回答

18

通过使用安全认证,您可以划掉安全漏洞。只需保持JMX服务准备就绪,不会产生任何显著的开销,并且通常是个好主意。这里有一个关于此的基准链接


如果我们只启用本地访问JMX,那么我是否需要设置安全身份验证? - Serxipc
这取决于许多因素,例如服务器上是否有其他用户以及应用程序的重要性如何。在任何生产服务器中,我都会至少启用密码身份验证。 - JtR

6
JMX的开销很低,您可以通过使用SSL和身份验证来解决安全问题。设置-Dcom.sun.management.jmxremote.ssl=true和-Dcom.sun.management.jmxremote.authenticate=true。
有关设置证书等更多信息,请参见此处
当您开始检测代码时,开销会成为一个问题。开销可能很大,并且检测可能会影响应用程序的行为。您将看不到所得到的结果,即所谓的海森堡效应
如果你想要低开销,我建议使用JRockit自带的工具。它们利用JVM一直收集的信息。JVM会统计哪些方法运行最频繁,以决定应该优化哪些方法。JVM还会跟踪内存使用/模式,以决定选择哪种gc策略。JRockit将这些数据暴露给JRockit工具,而不会增加通常从单独的JMVTI-agent中获取的插装开销。

3

JMX是一个等待连接的套接字,允许外部进程访问已收集的数据。因此,通常罚款很低(当然,除非你用请求攻击JMX服务器)。

JMX允许您访问Java虚拟机的内部。有命令可以运行GC和关闭它。话虽如此,JMX提供了安全连接模式,该模式使用公钥和身份验证。有关详细信息,请阅读文档。


如果我们只允许本地访问JMX,我是否需要设置安全认证? - Serxipc
这取决于同一台计算机上安装的其他所有内容。如果黑客能够侵入任何其他东西,他们将拥有本地访问权限。 - Aaron Digulla

2
我们在生产服务器上使用了Lambda探针,没有看到任何显著的开销。我可以推荐使用探针作为可靠的产品,适用于生产环境(Tomcats 5.5和6.0,JDK 5和JDK 6)。

0

这取决于JMX实现方式以及您想要监视的内容的成本。我知道至少有一个JMX应用程序,其内存开销相对较高。


1
"JMX实现"是什么意思?我在谈论使用系统属性com.sun.management.jmxremote启用Sun JVM jmx进行监控。 - Serxipc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接