【问题标题】:Runtime.getRuntime().availableProcessors() not returning available coresRuntime.getRuntime().availableProcessors() 不返回可用内核
【发布时间】:2012-08-31 07:31:09
【问题描述】:

我们有一台带有 4 个 Intel Xeon E7 4850 处理器(NUMA 节点)的高端服务器机器,每个处理器有 10 个内核和 2 个线程。所以实际上我们有 80 个核心的机器。 (windows任务管理器显示80核) 现在我的问题是当我执行 Runtime.getRuntime().availableProcessors() 它返回 40,所以我的应用程序只产生 40 个线程。 为什么会这样?

【问题讨论】:

  • 最好有一个选项来覆盖您的应用程序通过配置执行的自动线程分配,从而回避 JVM 能够正确解决的问题。
  • 我无法覆盖,因为在具有 8 个核心的机器上它返回 8 个,因此产生了 8 个线程。我事先不知道我的应用程序将在哪里运行。它应该像我在查询中提到的那样在普通服务器机器和高端机器上运行

标签: multithreading jvm cpu core


【解决方案1】:

除非您使用的是存在错误的 Windows 2003:“Windows Server 2003 中错误地报告了启用物理超线程的处理器的数量或物理多核处理器的数量”... p>

...如果启用了超线程,“40 核”的计数是错误的结果,这似乎是因为 Windows 报告了正确的逻辑 CPU 核数。

如果没有可用的 Java 修复程序,那么您可以使用 JNI 到 call the GetLogicalProcessorInformation() Windows API call(包括源代码,适用于 XP SP3 和更新版本)。

【讨论】:

    猜你喜欢
    • 2019-08-30
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    相关资源
    最近更新 更多