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

Sac*_*hin 13 java linux

我搜索过类似主题的先前帖子,但找不到合适的答案因此问这个问题.非常感谢您的回答.

我知道在Linux中通过taskset命令设置进程对特定CPU核心的亲和力.但我想设置一个Java线程与特定cpu核心的亲和力,以便属于同一进程的其他线程可以在所有剩余的核心上运行.例如,如果我有一个包含10个线程和4核机器的进程,我想为一个线程保留core-1,并让剩余的9个线程在剩余的3个核心上运行.可以这样做吗?

谢谢萨钦

小智 10

说2241是你的java进程的pid.跑:

jstack 2241
Run Code Online (Sandbox Code Playgroud)

这为您提供了一个线程列表.在那里找到你的并注意nid字段.说nid = 0x8e9,它转换为基数10为2281.然后运行:

taskset -p -c 0 2281
Run Code Online (Sandbox Code Playgroud)

完成.


Tim*_*imr 7

遗憾的是,您无法将Java线程分配给特定核心.但是,您可以做的是设置线程优先级以确定线程的优先级(假设这将完成相同的事情)

或者,您可以使用JNI,但这将是完全矫枉过正的.