java - 如何从 JVM 分析和监控 gc.log 垃圾收集器日志文件

标签 java garbage-collection jvm

我想知道可视化分析和监视 java gc.log 文件的最佳方法是什么。

GCViewer是迄今为止我发现的最有趣的工具,但我想知道是否有更好的或好的解决方案来监视多个远程 gc.log 文件。

最佳答案

我认为分析垃圾收集器日志的最有效方法是查看输出本身。我们的生产服务器都使用 Concurrent Mark Sweep Collector 运行,我的日志使用选项 -Xloggc:$GCLOGFILE -XX:+PrintGCDetails 运行。如果环境遇到问题我

  • 首先通过搜索“Full GC”和
  • 来检查Full GC的数量。
  • 检查CMS的数量和频率,并在收集阶段寻找错误信息(通常以“failed to...”开头)。

  • 我通常还会查看线程列表并检查垃圾收集器消耗的 cpu 时间。我通过使用 -p <java-pid> 运行 top 来做到这一点。参数,然后按“H”,这样您就可以看到消耗最多 cpu 时间的 pid。然后可以将其与线程转储相匹配,以查看 gc 线程是否是最耗时的线程。每个线程都有一个显示在线程转储中的 pid,它是十六进制的,这可以与顶部的 pid 匹配。

    查看 GC 消耗的 cpu 时间并将其与您的日志输出相匹配非常重要。我多次尝试 GCViewer,但从未真正从 GC-Data 的视觉显示中得到有用的提示。

    关于java - 如何从 JVM 分析和监控 gc.log 垃圾收集器日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8835052/

    相关文章:

    Java编译器字符串优化

    Python:垃圾收集失败?

    Java 通用返回类型问题

    java - JVM 垃圾回收问题

    Java - 这个对象什么时候卸载?

    java - 是什么导致 Java 程序因包含 SIGSEGV 的热点转储而终止?

    java - 计算 JVM 中不可变对象(immutable对象)的数量

    Java try/catch 性能,是否建议将 try 子句中的内容保持在最低限度?

    java - 嵌套类中的类可访问性

    java - 未编译 Maven 依赖项