【问题标题】:Java multithreading peak processor usageJava 多线程峰值处理器使用率
【发布时间】:2012-11-26 11:02:29
【问题描述】:

我似乎对重负载的多线程 Java 应用程序(使用客户端 JVM 启动)的处理器使用情况有一个奇怪的解读。

问题在于,即使在重负载下,处理器使用率也会达到 99.9%(使用 Debian Linux Kernel 2.6 上的顶级系统实用程序)。这看起来很奇怪,因为服务器是 8 核的,因此我预计某些东西会进入 >100% 的重负载领域。

是否有任何我应该考虑的 JVM 选项或我应该查看的任何系统参数?

我目前正在使用以下参数进行 JVM 启动:

  java -XX:PermSize=128M -XX:MaxPermSize=512M -Xss1024k -Xms512M -Xmx2048M

【问题讨论】:

  • 好吧,99.9% 的利用率对于高处理器负载来说真的很奇怪。真正加载处理器应该高多少?
  • 如果在top 中按I(大写i)切换Irix 模式会发生什么?
  • @Hristo Iliev - 下降到大约 18%。它是 6-10%。服务器为8核*2线程。
  • @Val:我真的希望达到 99.99%。
  • 一直固定在 99.9% 吗?还是上下波动?

标签: java multithreading jvm cpu-usage multicore


【解决方案1】:

观察到的处理器使用最可能的原因是您的应用程序存在并发瓶颈,这实际上将其平均限制为单个线程的速度。

更改 JVM 选项不太可能产生重大影响。您需要使用 Java 性能分析器找出瓶颈在哪里,并找出如何消除它们。

【讨论】:

  • 我也在想同样的事情,但处理器使用率达到 99.9% 的峰值不是很奇怪吗?如果瓶颈是问题的根源,那么我认为处理器的使用率会低于该水平。仅使用一个处理器的 99.9% 表明应用程序需要更多的 CPU 能力来处理密集型任务并且无法获得。
  • 考虑一下……没必要。如果所有线程都等待一个其他处理器密集型线程,则会出现上述情况。真的。我会再介绍一下。谢谢。
  • 好的,我检查了分析器,对于完全相同的系统 pid,它报告的平均 CPU 使用率低于 15%。顶级系统实用程序在同一时间间隔内检测到 99.9% 的 CPU 使用率。我很困惑。
  • @TudorVintilescu,分析器的读数与您在关闭 Irix 模式的 top 中看到的一致。它显示总可用 CPU 功率的利用率,而在 Irix 模式下,您会看到与单个 CPU 相关的利用率。
【解决方案2】:

重负载的多线程 Java 应用程序(使用客户端 JVM 启动)。

这听起来是个坏主意。 Client VM 专为小型、轻量级应用程序而设计,例如 32 位系统上的小程序。我建议您使用 Linux、Solaris 和 64 位 Windows 上的默认服务器 VM。

这似乎很奇怪,因为服务器是 8 核的,因此我预计某些东西会进入 >100% 的重负载范围。

这意味着您的应用程序实际上是单线程的。您可能正在尝试使用多个线程,但除非它们可以独立运行,否则它们一次不能运行多个线程。

是否有任何我应该考虑的 JVM 选项或我应该查看的任何系统参数?

命令行选项无法控制这一点。这完全取决于您的线程如何交互。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    相关资源
    最近更新 更多