Java Visual VM是否会影响受监控的JVM的性能?

问题描述:

我正在考虑用Java Visual VM剖析生产环境。我想montitor:Java Visual VM是否会影响受监控的JVM的性能?

  • CPU使用率
  • GC活动
  • 使用的堆
  • 螺纹

这是否监控必须在JVM性能的任何显著影响的状态?

+0

很可能不是。但为什么你不试试呢? – XtremeBaumer

+3

这个问题太广泛了。目前的答案是“是的,它的确如此”。 –

根据我的经验,除非您使用探查器,否则不会显着减速。使用Profiler模式,这是您的过滤器问题,无论性能影响是否显着。采样器是一个更安全的选择,但是您必须注意,启用任何一个都会触发一些热代码替换,这会导致系统在短时间内无法使用(并且可能会触发该代码:JDK7 Application is getting slow after some Uptime)。

当然,如果您只想获得基本信息(内存,cpu-graph,gc和线程数),其影响会更低。

我的答案有多确定?到目前为止,我已经使用JVisualVM,JProfiler和YourKit近10年了。我们在客户的产品代码(常规网络应用程序)中使用yourkit中的采样/监控模式(与jvisualVM的功能基本相同)来分析性能错误。它没有任何明显的影响。但是,如果您只需要基本的系统监控,则可能会有更合适的产品需要考虑,比如java旋律(https://github.com/javamelody/javamelody/wiki)或kieker(http://kieker-monitoring.net/)。

这一切都取决于你在做什么,性能影响的实际程度很难确定。

如果您通过JVM的MXBeans监视某个GC,它的影响很小,如果您经常监视它,它会产生很大的影响。

如果您需要调查与CPU相关的问题,抽样可以提供一种简单的机制来识别瓶颈,并且对性能影响最小。

+0

Thx。我刚才澄清了这个问题。这是关于cpu,内存,gc和线程的简单监控。 –

是的,它会影响您的JVM性能。这取决于很多因素。如果您只是访问MBean属性或调用操作,那么影响非常小。但只要启动CPU /内存采样器或分析器,它就会显着增加影响。有多显着?让我们来看看。采样的

对性能的影响:

Visual VM Screenshot

连VisualVM的一个简单的程序,睡在启动时(不执行任何操作的话)。所以主线程在睡觉。我启动了CPU采样器60秒。总CPU时间为60秒的读数为5640ms(5.64秒)。

这是我使用本地机器连接时没有任何加密。当您使用SSL(必须用于生产环境)添加加密时,影响会进一步增加。