Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JVM只使用服务器上一半的内核_Java_Multithreading_Hyperthreading - Fatal编程技术网

Java JVM只使用服务器上一半的内核

Java JVM只使用服务器上一半的内核,java,multithreading,hyperthreading,Java,Multithreading,Hyperthreading,我在WindowsServer2019上运行了许多使用OpenJDK11的Java进程。服务器有两个物理处理器,共36个内核;这是一台HP机器。当我启动流程时,我会在Task Manager中看到所有核心的工作分配。这很好。然而,在进程运行一段时间后(时间不一致),机器开始仅使用一半的内核 我正在研究一些理论: JDK存在一些问题,它无法一致地访问所有核心 Windows Server 2019出现了问题,限制了Java访问所有核心 存在热管理问题,一个处理器变得太热,操作系统将所有处理定向到另

我在WindowsServer2019上运行了许多使用OpenJDK11的Java进程。服务器有两个物理处理器,共36个内核;这是一台HP机器。当我启动流程时,我会在Task Manager中看到所有核心的工作分配。这很好。然而,在进程运行一段时间后(时间不一致),机器开始仅使用一半的内核

我正在研究一些理论:

  • JDK存在一些问题,它无法一致地访问所有核心

  • Windows Server 2019出现了问题,限制了Java访问所有核心

  • 存在热管理问题,一个处理器变得太热,操作系统将所有处理定向到另一个处理器

  • 超线程和“逻辑”处理器存在一些问题,导致进程无法利用所有内核

  • 我曾尝试搜索JDK问题,但没有找到类似的问题。我去了服务器,虽然它运行得有点热,但它似乎没有过热。我还没有尝试禁用超线程。我尝试了许多参数来强制JVM使用所有的核心,实际上,这个过程最初确实使用了所有的核心;我可以在任务管理器中看到该活动

    有人有什么想法吗?这真是一个令人费解的问题,如果有任何想法,我将不胜感激

    更新:通过使用任务管理器将一个java.exe进程分配给另一个处理器,我可以让它使用另一个处理器。这也可以通过命令行上的java调用以及使用哪个套接字的参数来实现


    话虽如此,这感觉像是一个黑客。我不明白为什么我必须手动为我的每个java进程分配一个套接字;这项工作应该留给操作系统来完成。我仍然不确定问题出在哪里,是操作系统还是什么。

    这是一种体系结构吗?有时操作系统会试图将所有线程/进程保持在一个物理CPU上(我知道数据库服务器经常会遇到这种情况),我不确定,有没有办法判断服务器是否有NUMA?@Aaron很遗憾,我在Windows 2019上,您的链接与Linux有关。我可以看到插槽、内核和逻辑处理器。我真的不知道如何确定Windows机器上的NUMA设置。有什么想法吗?