25

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

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

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

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

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

更新

查看答案似乎单独启用 JMX 不会对 VM 产生重大开销。如果附加到 VM 的监视应用程序(无论是JConsolelambda 探针还是任何其他应用程序)过度投入地轮询,则可能会产生额外的工作。

4

5 回答 5

18

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

于 2008-11-24T21:34:49.130 回答
6

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

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

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

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

于 2008-12-11T00:41:08.560 回答
3

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

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

于 2008-11-24T09:34:50.503 回答
2

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

于 2008-11-27T20:13:27.577 回答
0

这取决于 JMX 实现以及您想要监控的东西的成本。我现在至少有一个 JMX 应用程序,它具有比较高的内存开销。

于 2008-11-24T15:40:29.140 回答