我的任务是分析垃圾收集。我已经配置了用于记录 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]
这是否意味着我需要专注于代码才能了解为什么该特定任务如此之高?也许这是线程/数据库问题?
我应该尝试让这些数字尽可能接近 454784K->14336K 吗? 我需要完整GC吗?
有什么想法吗?
最佳答案
这取决于您的目标是什么。 GC 时间会因多种因素而异,其中最重要的是
- 是否执行了 Full GC。
- 年轻一代保留了多少数据。
恕我直言,提高性能的最佳方法是降低分配率。这将使您的代码在 GC 暂停之间速度更快,减少 GC 暂停次数,并使您的应用程序更易于调整。我建议尝试使用 Flight Recorder 来监控您的内存分配。
关于java - 如何分析JVM垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35796536/