【问题标题】:Java CompilerThread taking more CPU usageJava CompilerThread 占用更多 CPU
【发布时间】:2013-08-19 13:13:05
【问题描述】:

我们有一个带有 java IO 操作的服务器应用程序。运行应用程序时,我们观察到 CompilerThread0 和 CompilerThread1 的 CPU 使用率分别为 45% 和 41%。应用程序此时正在为客户端提供 IO,例如连接、接收和发送。据我探索与此相关,我发现编译器线程用于 JIT 并用于提高性能。

我的问题是首先,为什么编译器线程占用大量 CPU 以及如何最小化这点以便我们可以将 CPU 分配给其他线程。

提前致谢!

【问题讨论】:

    标签: java performance jit


    【解决方案1】:

    首先我的问题是,为什么编译器线程占用大量 CPU

    在正常情况下,JIT 编译器应该在您的应用程序运行一段时间后启动,以(逐步)编译频繁调用的类/方法。编译活动应该会停止……一旦需要编译的所有代码都已编译完毕。

    如果编译活动没有停止,那么奇怪的事情正在发生。它可能是以下之一:

    • 您的应用程序大量使用动态代理,并且您不断生成新的代理类。
    • 您的应用程序正在动态加载(和卸载)大量类。
    • 您遇到了某种 JVM 错误。 (但我找不到与这些症状相匹配的错误数据库条目。所以我称之为“不太可能”。)

    以及如何最小化这种情况,以便我们可以将 CPU 分配给其他线程。

    有一些潜在的 JVM 选项可能会有所帮助,但我认为你最好弄清楚是什么原因造成的。

    【讨论】:

    • 我会检查以上建议,希望能找到原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2013-10-22
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多