相关疑难解决方法(0)

如何确认NUMA?

如何确认主机是否具有NUMA感知功能?在甲骨文的文档说,NUMA意识开始于内核2.6.19,但NUMA手册页说,它与2.6.14介绍.我想确保Java进程开始-XX:+UseNUMA实际上正在利用某些东西.

检查numa_maps,我看到我有它们:

# find /proc -name numa_maps
/proc/1/task/1/numa_maps
/proc/1/numa_maps
/proc/2/task/2/numa_maps
/proc/2/numa_maps
/proc/3/task/3/numa_maps
Run Code Online (Sandbox Code Playgroud)

虽然我的内核落后于Oracle所说的内容:

# uname -sr
Linux 2.6.18-92.el5
Run Code Online (Sandbox Code Playgroud)

我目前在RHEL5.1上使用64位jdk1.6.0_29.

java linux numa

7
推荐指数
1
解决办法
6806
查看次数

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

我有许多使用 OpenJDK 11 的 Java 进程在 Windows Server 2019 上运行。该服务器有两个物理处理器和 36 个总内核;这是一台惠普机器。当我启动我的流程时,我会在任务管理器中看到所有内核的工作分配。这很好。然而,在进程运行一段时间后,不是一致的时间量,机器开始只使用一半的内核。

我正在研究一些理论:

  1. JDK 存在一些问题,阻止它始终如一地访问所有内核。

  2. Windows Server 2019 出现问题,限制 Java 访问所有内核。

  3. 存在热管理问题,一个处理器变得太热,操作系统将所有处理工作转移到另一个处理器。

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

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

有人有什么想法吗?这是一个非常令人困惑的问题,我很感激任何想法。

更新:通过使用任务管理器将 java.exe 进程之一分配给另一个处理器,我能够使其使用另一个处理器。这也适用于命令行上的 java 调用以及使用哪个套接字的参数。

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

java multithreading hyperthreading

5
推荐指数
0
解决办法
225
查看次数

标签 统计

java ×2

hyperthreading ×1

linux ×1

multithreading ×1

numa ×1