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

时间:2017-08-30 10:50:15

标签: java visualvm

我正在考虑使用Java Visual VM配置生产环境。我想监视:

  • CPU使用率
  • GC活动
  • 二手堆
  • 线程状态

此监控是否会对JVM的性能产生重大影响?

3 个答案:

答案 0 :(得分:4)

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

当然,如果你只想获得基本信息(内存,cpu-graph,gc和thread-count),影响会更低。

我的回答有多确定?到目前为止,我已经使用JVisualVM,JProfiler和YourKit近10年了。我们在客户的生产代码(常规Web应用程序)中使用了yourkit中的采样/监控模式(它与jvisualVM基本相同)来分析性能错误。它没有任何明显的影响。

但是,如果您只需要基本的系统监控,可能会考虑更合适的产品,如java melody(https://github.com/javamelody/javamelody/wiki)或kieker(http://kieker-monitoring.net/)。

答案 1 :(得分:2)

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

抽样对效果的影响:

Visual VM Screenshot

将VisualVM连接到一个在启动时休眠的简单程序(什么都不做)。所以主线程正在睡觉。我启动了CPU采样器 60秒。总CPU时间为60秒的读数为5640毫秒( 5.64秒)。

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

答案 2 :(得分:0)

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

如果您通过JVM的MXBeans监控某些GC,它的影响很小,如果您不断监控它会产生很大的影响。

如果您需要调查CPU相关问题,采样提供了一种识别瓶颈的简单机制,对性能的影响最小。