如何设置 Java 线程的 CPU 核心关联?

2022-09-04 01:37:50

我搜索了以前关于类似主题的帖子,但找不到合适的答案,因此问了这个问题。非常感谢您帮助回答它。

我知道在Linux中通过taskset命令设置进程与特定CPU内核的相关性。但是我想将Java线程的关联性设置为特定的cpu内核,以便属于同一进程的其他线程可以在所有剩余的内核上运行。例如,如果我有一个包含 10 个线程的进程和 4 核计算机,我想为一个线程保留 core-1,并让剩余的 9 个线程在剩余的 3 核上运行。它能做到吗,如何做到?

谢谢萨钦


答案 1

假设2241是你的java进程的pid。跑:

jstack 2241

这将为您提供线程列表。在那里找到你的,并注意nid字段。假设 nid=0x8e9,它将以 10 为基数转换为 2281。然后运行:

taskset -p -c 0 2281

做。


答案 2

遗憾的是,您无法将 Java 线程分配给特定内核。但是,您可以做的是设置线程优先级以优先处理线程(假设这将完成相同的操作)

或者,您可以使用JNI,但这完全过分了。


推荐