gpt4 book ai didi

java - java中如何分析内存碎片?

转载 作者:搜寻专家 更新时间:2023-10-30 20:53:37 24 4
gpt4 key购买 nike

我们的服务器出现几分钟的延迟。它们可能是由“停止世界”垃圾收集触发的。但是我们使用并发标记和清除 GC (-XX:+UseConcMarkSweepG) 所以,我认为这些暂停是由老年代的内存碎片触发的。

年老代的内存碎片如何分析?有什么工具吗?

延迟每小时都会发生。大多数时间约为 20 秒,但有时 - 几分钟。

最佳答案

查看您的 Java 文档,了解用于打开 GC 日志记录的“java -X...”选项。这将告诉您是在收集老一代还是新一代,以及收集需要多长时间。

“几分钟”的停顿听起来非同寻常。您确定您不只是在运行时堆大小太小,还是在物理内存不足的机器上运行?

  • 如果你的堆快满了,GC 将再次触发并且再次,导致您的服务器将大部分 CPU 时间花在GC。这将显示在 GC 中日志。

  • 如果你在机器上使用大堆没有足够的物理内存,一个完整的 GC 很容易导致你的机器“颠簸”,花费大部分时间疯狂移动虚拟内存页进出光盘。你可以使用系统观察这个监控工具;例如通过观看来自“vmstat 5”的控制台输出一个典型的 UNIX/Linux 系统。

跟进

与 OP 的看法相反,打开 GC 日志记录不太可能对性能产生显着影响。

Understanding Concurrent Mark Sweep Garbage Collector Logs Oracle 站点上的页面应该有助于解释 GC 日志。

最后,OP 认为这是一个“碎片化”问题的结论不太可能,并且 (IMO) 没有得到他提供的证据片段的支持。这很可能是其他原因。

关于java - java中如何分析内存碎片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1253388/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com