从Java中限制CPU

Dif*_*din 8 java cpu multithreading jvm throttling

我在这个(和其他)论坛上看到了许多相同标题的问题,但它们似乎都没有解决我的问题.就是这样:我有一个JVM,可以在托管它的机器上占用所有CPU.我想限制它,但是我不能依赖Java 外部的任何限制工具/技术,因为我不能假设这个Vm将在哪里运行.因此,例如,我无法使用处理器关联,因为如果VM在Mac上运行,则操作系统不会使进程关联可用.

我需要是指示是否存在手段的Java,以确保线程不取足CPU.

我想直截了当地指出,我不能使用基于交替进程执行和暂停的技术,如某些论坛所建议的那样,因为线程需要不断生成值.

理想情况下,我想要一些意思,例如,设置一些VM或线程优先级,或以某种方式限制CPU消耗的百分比.

任何帮助将非常感激.

Gra*_*ray 5

我需要的是指示Java中是否存在手段以确保线程不占用完整的CPU.

除了将应用程序调整为使用更少的CPU之外,我无法在Java中执行此操作.

  • 您可以Thread.sleep(...);在计算方法中调用一些调用.分析器可以帮助您显示热循环/方法/等.
  • 分叉较少的线程也会影响所使用的CPU.移动到固定大小的线程池或降低池中的线程数.
  • 问题可能不是CPU,而是其他资源.例如,观察您的IO带宽.减慢网络或磁盘读/写可能会使服务器恢复正常运行.

从JVM外部可以使用~unix nice命令来影响正在运行的JVM的优先级,使其不支配系统.这将为CPU提供CPU(如果可用),但会让其他应用程序获得更多CPU.


Dif*_*din -1

非常有趣的话题。我发现 Java 没有提供做我想做的事情的方法,而做到这一点的唯一方法是从JVM外部。我最终使用nice来改变我的测试(Linux)环境中的调度优先级,仍然需要为基于WIN的操作系统找到类似的东西。

非常感谢大家的参与。