Java Visual VM 是否会影响受监视 JVM 的性能?
Does Java Visual VM impacts the performance of the monitored JVM?
我正在考虑使用 Java Visual VM 分析生产环境。我要监控:
- CPU 用法
- GC activity
- 已用堆
- 线程状态
这种监控对 JVM 的性能有什么重大影响吗?
这完全取决于你用它做什么,性能影响的实际程度很难确定。
如果您通过 JVM 的 MXBeans 监控某些 GC,它的影响很小,如果您持续监控它会产生很大的影响。
如果您需要调查 CPU 相关问题,抽样提供了一种识别瓶颈的简单机制,对性能的影响最小。
根据我的经验,除非您使用探查器,否则不会出现明显的减速。使用探查器模式,无论性能影响是否显着,都取决于您的过滤器。采样器是一个更安全的选择,但是你必须知道,启用其中任何一个都会触发一些热代码替换,这会使系统在短时间内无法使用(并且也可能触发那个: ).
当然,如果你只是想获取基本信息(内存,cpu-graph,gc和thread-count)影响会更低。
我对自己的回答有多确定?到目前为止,我已经使用 JVisualVM、JProfiler 和 YourKit 将近 10 年了。我们在客户的生产代码(常规网络应用程序)中使用 yourkit 中的 sampling/monitoring 模式(与 jvisualVM 做的事情基本相同)来分析性能错误。它没有任何明显的影响。
但是,如果您只需要基本的系统监控,可能有更合适的产品可以考虑,例如 java melody (https://github.com/javamelody/javamelody/wiki) or kieker (http://kieker-monitoring.net/)。
是的,它确实会影响您的 JVM 性能。这取决于很多因素。如果您只是访问 MBean 属性或调用操作,则影响很小。但是,一旦您启动 CPU/Memory 采样器或分析器,它就会显着增加影响。有多显着?让我们看看。
采样的性能影响:
将 VisualVM 连接到一个在启动时休眠的简单程序(什么都不做)。因此,主线程正在休眠。我启动了 CPU 采样器60 秒。这 60 秒的总 CPU 时间读数为 5640 毫秒(5.64 秒)。
这是我使用未加密的本地计算机连接时的结果。当您使用 SSL 添加加密时(这对于生产环境是必须的。)影响会进一步增加。
我正在考虑使用 Java Visual VM 分析生产环境。我要监控:
- CPU 用法
- GC activity
- 已用堆
- 线程状态
这种监控对 JVM 的性能有什么重大影响吗?
这完全取决于你用它做什么,性能影响的实际程度很难确定。
如果您通过 JVM 的 MXBeans 监控某些 GC,它的影响很小,如果您持续监控它会产生很大的影响。
如果您需要调查 CPU 相关问题,抽样提供了一种识别瓶颈的简单机制,对性能的影响最小。
根据我的经验,除非您使用探查器,否则不会出现明显的减速。使用探查器模式,无论性能影响是否显着,都取决于您的过滤器。采样器是一个更安全的选择,但是你必须知道,启用其中任何一个都会触发一些热代码替换,这会使系统在短时间内无法使用(并且也可能触发那个:
当然,如果你只是想获取基本信息(内存,cpu-graph,gc和thread-count)影响会更低。
我对自己的回答有多确定?到目前为止,我已经使用 JVisualVM、JProfiler 和 YourKit 将近 10 年了。我们在客户的生产代码(常规网络应用程序)中使用 yourkit 中的 sampling/monitoring 模式(与 jvisualVM 做的事情基本相同)来分析性能错误。它没有任何明显的影响。
但是,如果您只需要基本的系统监控,可能有更合适的产品可以考虑,例如 java melody (https://github.com/javamelody/javamelody/wiki) or kieker (http://kieker-monitoring.net/)。
是的,它确实会影响您的 JVM 性能。这取决于很多因素。如果您只是访问 MBean 属性或调用操作,则影响很小。但是,一旦您启动 CPU/Memory 采样器或分析器,它就会显着增加影响。有多显着?让我们看看。
采样的性能影响:
将 VisualVM 连接到一个在启动时休眠的简单程序(什么都不做)。因此,主线程正在休眠。我启动了 CPU 采样器60 秒。这 60 秒的总 CPU 时间读数为 5640 毫秒(5.64 秒)。
这是我使用未加密的本地计算机连接时的结果。当您使用 SSL 添加加密时(这对于生产环境是必须的。)影响会进一步增加。