生产环境中可以使用VisualVM吗?

9

我考虑运行VisualVM来监视生产JVM的运行情况,因为它似乎由于某些原因开始消耗过多CPU资源。

必须确保这不会导致JVM崩溃,所以我正在尝试评估所有风险。

他们网站上唯一可能导致JVM崩溃的问题与类共享和-Xshare JVM选项有关,但据我所知,类共享在服务器模式和/或x64系统上未启用。

那么,在生产JVM上运行VisualVM真的安全吗?如果不安全,应该考虑哪些风险,并且在JVM上运行VisualVM(并进行性能分析)会产生多大的负载(CPU/内存)?

谢谢

3个回答

6
据我所知,VisualVM可以在生产环境中使用,但我只会在轻负载的服务器上使用它。你可以等待服务变慢,然后在它不被大量使用时测试它,看看是否有一些集合非常大。或者你可以触发堆转储并离线分析它。
如果没有重大开销,你无法获得关于方法调用的统计信息。Java 6和7比Java 5更好,但即使使用商业分析工具,它仍可能使应用程序减速30%。

离线分析对于内存泄漏很有帮助,但它无法为方法调用提供统计数据。 - Oleg Mikheev
而且,如果不付出较大的开销,你无法获得有关方法调用的统计数据。Java 6和7比Java 5更好,但即使使用商业分析工具,它仍可能使您的应用程序减速30%。 - Peter Lawrey

2

实际上,通过使用堆栈转储,您可以在没有太多开销的情况下获取一些信息。甚至有一个脚本可以帮助您在https://gist.github.com/851961上执行此操作。

这种类型的分析是最不具侵入性的。


1
堆栈转储可以提供一些信息,但不利于检测内存泄漏。堆转储更有帮助,但解析它们是一个全新的科学。 - Oleg Mikheev

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接