如何分析JVM垃圾回收?
How to Analyze JVM Garbage Collection?
我的任务是分析垃圾收集。我已经配置了用于记录 GC 的服务器,并且统计信息已正确传递。现在我有了 GC 信息,我有一个关于调优的问题。将我的 GC 文件插入分析工具后,我发现没有 Full GC 只有 minor GC。这是个问题吗?
另外,如果您查看以下行...
[PSYoungGen: 454784K->14336K(450688K)] 685884K->258421K(1761408K), 8.6630322 secs] [Times: user=30.25 sys=1.20, real=8.66 secs]
这是否意味着……
454784K->14336K = Usage of Young generation before and after collection
对我来说,这看起来在收集之前比收集之后有更多年轻的 GC。在这种情况下,我应该创建一个新比率吗?还是我在倒着看这个?
685884K->258421K = Total used heap before and after collection
此外,我在 运行 JMeter 测试后的最长时间是...
[Times: user=30.25 sys=1.20, real=8.66 secs]
我最短的时间是
[Times: user=0.73 sys=0.29, real=0.16 secs]
这是否意味着我需要专注于代码以了解为什么特定任务如此之高?也许是 threading/DB 的问题?
我是否应该尝试让这些数字尽可能接近 454784K->14336K?
我需要 Full GC 吗?
有什么想法吗?
这取决于你的 objective 是什么。您的 GC 时间会因多种因素而异,最重要的是
- 执行了 Full GC。
- 年轻一代保留了多少数据。
恕我直言,提高性能的最佳方法是降低分配率。这将使您的代码在 GC 暂停之间更快,减少 GC 暂停的次数,并使您的应用程序更易于调整。我建议尝试使用 Flight Recorder 来监控您的内存分配。
我的任务是分析垃圾收集。我已经配置了用于记录 GC 的服务器,并且统计信息已正确传递。现在我有了 GC 信息,我有一个关于调优的问题。将我的 GC 文件插入分析工具后,我发现没有 Full GC 只有 minor GC。这是个问题吗?
另外,如果您查看以下行...
[PSYoungGen: 454784K->14336K(450688K)] 685884K->258421K(1761408K), 8.6630322 secs] [Times: user=30.25 sys=1.20, real=8.66 secs]
这是否意味着……
454784K->14336K = Usage of Young generation before and after collection
对我来说,这看起来在收集之前比收集之后有更多年轻的 GC。在这种情况下,我应该创建一个新比率吗?还是我在倒着看这个?
685884K->258421K = Total used heap before and after collection
此外,我在 运行 JMeter 测试后的最长时间是...
[Times: user=30.25 sys=1.20, real=8.66 secs]
我最短的时间是
[Times: user=0.73 sys=0.29, real=0.16 secs]
这是否意味着我需要专注于代码以了解为什么特定任务如此之高?也许是 threading/DB 的问题?
我是否应该尝试让这些数字尽可能接近 454784K->14336K? 我需要 Full GC 吗?
有什么想法吗?
这取决于你的 objective 是什么。您的 GC 时间会因多种因素而异,最重要的是
- 执行了 Full GC。
- 年轻一代保留了多少数据。
恕我直言,提高性能的最佳方法是降低分配率。这将使您的代码在 GC 暂停之间更快,减少 GC 暂停的次数,并使您的应用程序更易于调整。我建议尝试使用 Flight Recorder 来监控您的内存分配。