Java多线程峰值处理器的使用

时间:2012-11-26 11:02:29

标签: java multithreading jvm cpu-usage multicore

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

问题在于,即使在高负载下,处理器使用率也达到99.9%(使用Debian Linux Kernel 2.6上的顶级系统实用程序)。这看起来很奇怪,因为服务器是一个8核心,因此我希望有一些东西可以在重载时达到> 100%teritory。

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

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

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

2 个答案:

答案 0 :(得分:1)

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

更改JVM选项不太可能产生显着差异。您需要使用Java性能分析器来确定瓶颈的位置,并找出如何消除它们。

答案 1 :(得分:1)

  

负载很重的多线程Java应用程序(使用Client JVM启动)。

这听起来不错。客户端VM专为小型,轻量级应用程序而设计,例如32位系统上的applet。我建议您使用Server VM,这是Linux,Solaris和64位Windows上的默认设置。

  

这看起来很奇怪,因为服务器是一个8核心,因此我希望有一些东西可以在重载时达到> 100%teritory。

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

  

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

命令行选项无法控制此操作。这完全取决于你的线程如何交互。