gpt4 book ai didi

java - 应用程序启动 5 小时后进行 Full GC,耗时 40 秒

转载 作者:行者123 更新时间:2023-12-02 05:35:42 25 4
gpt4 key购买 nike

我们在一次运行中处理了 500 万个请求。然而,在运行期间,很少有请求失败。验证关闭后,我们了解到 Full GC 已启动,并且花费了超过 40 秒(到 60 秒),从而导致超时。

配置:我们有 3 个 tomcat 实例和 Apache 服务器。UseParallelGc 与 20 个并行 GC 线程一起使用。

这是 GC 日志的摘录

[GC 9159407K->4631063K(9193536K), 0.1151870 secs]
[Full GC 4631063K->4474675K(9194112K), 40.2139890 secs]
[GC 9005619K->4545178K(9169472K), 0.0426840 secs]
[GC 9051866K->4587006K(9175232K), 0.1107250 secs]
[GC 9093694K->4603255K(9181440K), 0.1011030 secs]
[GC 9106359K->4627576K(9179776K), 0.1338130 secs]
[GC 9130680K->4631971K(9182144K), 0.1962060 secs]
[Full GC 4631971K->234907K(9181568K), 0.7454950 secs]
[GC 4739803K->278254K(9180288K), 0.0559540 secs]
[GC 4783150K->298456K(9181760K), 0.1616380 secs]
[GC 4804632K->300414K(9181376K), 0.0902670 secs]
[GC 4806590K->327319K(9180672K), 0.1219910 secs]
[GC 4832855K->319675K(9149376K), 0.0465920 secs]
[GC 4825211K->339411K(9182720K), 0.1143500 secs]
[GC 4845907K->340064K(9180736K), 0.0491540 secs]

我的问题是:

  1. Full GC 仅在应用程序启动后 5 小时后启动。有什么方法可以在不改变年轻人和老年人的内存大小的情况下调整它甚至更快地发生吗?

  2. 第一次完整 GC 运行(在 16:43:25)持续了 40 秒,但仅释放了大约 0.15 GB。然而,在一分钟内(16:44:12)发生了另一次完整 GC,并释放了超过 4 GB 的空间。差距只有一分钟。这可能是什么原因?

如果需要任何其他信息,请告诉我。

最佳答案

-XX:+UseParallelGC 仅对年轻代使用并行收集器。无论您有多少个线程,如果您只启用了 UseParallelGC,您的老一代收集总是仅使用 1 个线程以串行模式发生。

查看您的日志,我只看到 GC 的摘要,通常是 -XX+PrintGC 的输出,这不会提供有关该问题的太多线索。我建议你尝试一下

-XX:+PrintGCDetails
-XX:+PrintTenuringDistribution
-XX:-PrintGCTimeStamps

(或)-Xloggc 具有存储 GC 输出的某个位置。

使用上述标志,您可以了解更多详细信息,例如每一代 GC 之前和之后的内存,而不是单行代码

在您的日志中,完整 GC 可能是发生在您的老一代中的主要 GC,并且仅使用 UseParallelGcflags,它始终使用单个线程完成。

经过适当的分析后,您可以使用 -XX:+UseParallelOldGC 来并行执行老年代收集,如果您使用的是最新的 JDK7,则可以使用 CMS 或 G1 GC

关于java - 应用程序启动 5 小时后进行 Full GC,耗时 40 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24993790/

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