【问题标题】:What versions of java are slow for gc logging?哪些 Java 版本的 gc 日志记录速度很慢?
【发布时间】:2010-08-20 00:01:01
【问题描述】:

我公司的支持团队告诉我,当我们打开 -verbose:gc 时,某些 Java 版本会对性能产生重大影响。但是我不知道是不是这样。

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

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

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

【问题讨论】:

  • 他们是这么说的吗?根据我的经验,有一半时间他们不知道他们在说什么。在没有证据的情况下,这种说法只是八卦。
  • 这个特定的支持人员足够可靠,因此需要进一步调查。但是,有可能只是垃圾收集的其他方面可以更改以严重影响性能。我当然不记得那么久了。
  • 我担心你误解了我的意思。我毫不怀疑您的支持人员相信这是真的,当然记录总是比不记录要慢。你没有提到你为什么关心这个问题,所以这个问题可以表达为不是历史的好奇心,而是会产生更直接的答案。
  • 这肯定是假的 - 我在一个组织工作了 10 年,将 JVM 移植到各种平台,在任何 1.4.2 JVM 上运行 verbose:gc 时都没有减速。
  • 我同意上述评论和发布的答案。为了提供证据,您需要运行一些微基准测试。 SPECjbb、SPECjvm98,以及它们中的怪物,SPECjAppServer。祝你好运,并发布你的发现的更新。

标签: java performance logging garbage-collection jvm


【解决方案1】:

我知道您询问过详细信息的影响:gc(Amir 是正确的),但根据我看到的 cmets,您正在调查内存泄漏。

您是否可以获得环境的直方图?详细 GC 只会告诉您存在内存泄漏,而不是内存所在的位置。

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

jmap -histo <pid> > file.txt

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

【讨论】:

    【解决方案2】:

    我建议您执行以下操作:

    1. 编写一些可能强调垃圾收集的基准。 (创建带有弱引用等的大型链接数据结构)。

    2. 在某些测试盒上安装与您在生产中使用的相同版本的 JVM。

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

    如果你做对了,它会给你一些确凿的证据来证明你的生产服务器可能会对性能产生什么影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      相关资源
      最近更新 更多