gpt4 book ai didi

java - C2 编译器在启动时使 CPU 饱和

转载 作者:搜寻专家 更新时间:2023-10-30 23:03:06 26 4
gpt4 key购买 nike

我在 Java 7 上有一个 java servlet 应用程序,它在系统资源消耗方面通常非常健康。服务器上的 CPU 使用率通常低于 50%。然而,在启动后的几分钟内,它的行为会大不相同,以至于如果 CPU 在此期间尝试处理大量流量,它可能会在几分钟内保持在 100% 的状态。结果是响应时间变慢、网络超时,有时甚至是长时间的垃圾收集暂停。

为了诊断问题,我在服务器启动时进行了一系列线程转储,同时运行了 top -H。通过将每个 java 线程与 pid 进行匹配,我可以始终看到 C2 CompilerThread 使用了最多的 CPU。我已经研究过这个线程的作用,我知道它是一个基于运行时统计信息优化代码的 Java 编译器。但是从我所做的所有阅读中,我无法说出改善情况的最佳方法。我可以收集的唯一选项是:

  1. 从 C2 切换到 TieredCompiler(但这会在启动后的前几分钟带来更好的性能吗?)
  2. 打开 -XX:+PrintCompilation 以查看正在优化的内容(但是我该如何处理这些信息?我可以在服务器以某种方式接受流量之前强制对其进行优化吗?)

最好的方法是什么?是否有其他方法可以尝试减轻启动后的 CPU 使用率?

最佳答案

有几种付费的 JVM 技术可以使用提前编译来缓解您的问题。

但是,如果您想坚持使用标准 JVM,人们使用的一个技巧是在启动后发送一些虚拟请求,以便在实际操作开始之前预热 JVM。这样,您就可以在为客户提供服务之前决定何时支付 JVM 预热费用。

您还可以通过热点的 -Xcomp 命令行选项强制 JVM 编译所有代码,但我们不推荐因为它会通过编译很少使用的代码来减慢应用程序的启动速度。

关于java - C2 编译器在启动时使 CPU 饱和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26245766/

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