java - 如何分析JVM垃圾收集?

标签 java memory-leaks garbage-collection jvm

我的任务是分析垃圾收集。我已经配置了用于记录 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/

相关文章:

java - 对原始值的泛型转换导致 ClassCastException

java - 小文件耗尽堆空间

ios - 如何检查我的应用程序是否泄漏?

java - Java 中的链表实现和垃圾收集

java - 如何确定JVM GC吞吐量?

java - 如果已满,则从 ArrayBlockingQueue 中逐出对象

java - 来自浏览器的 Servlet 非生命周期方法调用

java - 检查明确的许可?

python - 将 Keras 模型应用于符号张量的 TF2.0 内存泄漏

c# - 可以强制对象在第 1 代或第 2 代而不是第 0 代中被垃圾回收吗?