Java Visual VM是否会影响受监控的JVM的性能?
我正在考虑用Java Visual VM剖析生产环境。我想montitor:Java Visual VM是否会影响受监控的JVM的性能?
- CPU使用率
- GC活动
- 使用的堆
- 螺纹
这是否监控必须在JVM性能的任何显著影响的状态?
根据我的经验,除非您使用探查器,否则不会显着减速。使用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相关的问题,抽样可以提供一种简单的机制来识别瓶颈,并且对性能影响最小。
Thx。我刚才澄清了这个问题。这是关于cpu,内存,gc和线程的简单监控。 –
很可能不是。但为什么你不试试呢? – XtremeBaumer
这个问题太广泛了。目前的答案是“是的,它的确如此”。 –