4

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

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

提前致谢!

4

1 回答 1

6

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

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

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

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

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

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

于 2013-08-17T14:44:34.683 回答