是否可以强制现有 Java 应用程序使用不超过 x 个内核?
我们正在对现有的Java程序进行基准测试。它们是线程化应用程序,旨在从多核 CPU 中受益。我们想测量内核数量对运行速度的影响,但我们不愿意(也无法)更改这些应用程序的代码。
当然,我们可以在不同的机器上测试软件,但这既昂贵又复杂。我们宁愿有一个软件解决方案。
注意:您可以假设测试平台是Windows,Linux或Mac。理想情况下,我们希望能够在这两个平台上运行测试。
我们正在对现有的Java程序进行基准测试。它们是线程化应用程序,旨在从多核 CPU 中受益。我们想测量内核数量对运行速度的影响,但我们不愿意(也无法)更改这些应用程序的代码。
当然,我们可以在不同的机器上测试软件,但这既昂贵又复杂。我们宁愿有一个软件解决方案。
注意:您可以假设测试平台是Windows,Linux或Mac。理想情况下,我们希望能够在这两个平台上运行测试。
它被称为设置 CPU 关联,它是进程的操作系统设置,而不是特定于 Java 的。
在 Linux 上:http://www.cyberciti.biz/tips/setting-processor-affinity-certain-task-or-process.html
在Mac上,它看起来不像是你可以设置它:https://superuser.com/questions/149312/how-to-set-processor-affinity-on-os-x
将问题颠倒过来;与其弄清楚如何将应用程序限制为仅在 m 核计算机上使用 n 个内核,不如弄清楚如何确保只有 n 个内核可用于您的应用程序。你可以编写一个非常简单的程序,通过做类似的事情来吃掉一个内核,并启动该程序的m-n个实例,以最高优先级运行,从而确保你的代码只有n个内核可用。while (true);
或者,如果您的BIOS或操作系统允许禁用CPU内核,那也可以。我知道Mac OS X上的CHUD工具曾经这样做过,但是自从G5时代以来,我就没有接触过这些工具,所以这可能不再起作用了。