什么版本的Java对于gc日志记录来说很慢?

时间:2010-08-20 00:01:01

标签: java performance logging garbage-collection jvm

我的公司支持团队告诉我,当我们打开-verbose:gc时,某些版本的Java会对性能产生重大影响。但是我无法弄清楚是否是这种情况。

这个记录在某个时刻是否缓慢(ish),什么时候停止?

我问的原因是,对于将其应用于生产环境以调查潜在的内存泄漏(以及我们是否可以停止定期重启系统......)存在一些犹豫。

具体来说,我在谈论Java 1.4.2,我认为它引入了这个论点,以及它适用的服务包。

2 个答案:

答案 0 :(得分:5)

我知道你问过verbose的影响:gc(Amir是正确的),但根据我看到你正在调查内存泄漏的评论。

您是否有可能获得环境的直方图?详细GC只会向您显示内存泄漏,而不是内存所在的位置。

你提到java 1.4.2,那是你当前的版本吗?如果您使用1.5或更高版本,则可以使用

jmap -histo <pid> > file.txt

这将为您提供内存中所有对象的细分。您将冻结JVM一段时间,具体取决于系统中的内存量。 (即使是好的硬件,2GB也可以冻结一分钟左右)首先在开发系统上进行测试。我知道你不想影响你的生产环境,但这是找到问题根源的必要条件。在定期重启之前立即进行捕获以吸取影响。

答案 1 :(得分:4)

我建议您执行以下操作:

  1. 写一些可能会给垃圾收集带来压力的基准测试。 (使用弱引用创建大型链接数据结构等)。

  2. 在某些测试框中安装与生产中相同版本的JVM的副本。

  3. 使用各种GC日志记录设置运行基准测试,包括您要在生产中运行的设置,测量对基准测试的性能影响。

  4. 如果您这样做,它将为您提供一些可靠的性能影响对您的生产服务器的影响。