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

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

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

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

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

是否有人使用相同的(tomcat + lambda探针)在生产中没有问题?

UPDATE

看看答案似乎单独启用JMX不会给VM带来很大的开销。 如果附加到VM的监视应用程序(无论是JConsolelambda探测器还是其他任何程序)正在以过度的奉献精神进行轮询,则可能会产生额外的工作。

您可以使用安全身份validation来消除安全漏洞。 只是保持JMX服务准备就绪不会产生任何重大开销,通常是一个好主意。 这里有一个基准。

JMX的开销很低,您可以通过SSL和身份validation来修复安全性。 设置-Dcom.sun.management.jmxremote.ssl = true和-Dcom.sun.management.jmxremote.authenticate = true

有关设置证书等的更多信息,请参见此处。

当您开始检测代码时,开销就成了问题。 开销可能很大,并且检测可能会影响应用程序的行为。 你不会看到你得到的东西,即所谓的海森堡效应 。

如果你想要低开销,我会使用JRockit附带的工具。 他们捎带JVM一直收集的信息。 JVM会统计哪些方法运行最多,以确定应该优化哪些方法。 JVM还会跟踪内存使用情况/模式,以决定选择哪个gc-stategy。 JRockit将这种类型的数据暴露给JRockit工具,而不会增加通常从单独的JMVTI -agent获得的检测开销。

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

JMX允许您了解Java VM的内容。 有命令可以运行GC并将其关闭。 也就是说,JMX提供了一种使用公钥和身份validation的安全连接模式。 请阅读文档了解详细信息。

我们在生产服务器中使用lambda探针,我们没有看到任何重大的开销。 我可以推荐使用探针作为可靠的产品(Tomcats 5.5和6.0,JDK 5和JDK 6)。

这取决于JMX实现以及您希望监视的内容有多昂贵。 我现在至少有一个JMX应用程序,它具有相对较高的内存开销。