我正在使用taskset来分配CPU核心 4-7到通常使用 ~200-400% CPU 的 Java 进程。核心 4-7 在启动时被隔离,因此只有 Java 进程应该在其上运行。
最终,taskset 似乎将生成的 java 进程锁定到四个核心中的一个,而不是将其分配给所有核心。
我使用的命令如下:
taskset -c 4,5,6,7 java [...] -jar [...]
使用taskset -c 4,5,6,7 stress -c 4
行为相同,并且只使用一个核心。
我如何将所有四个核心分配给 java 进程?
答案1
我自己找到了答案:只需添加一个-a
选项即可正如帮助中提到的(taskset -h
)
“对给定 pid 的所有任务(线程)进行操作
因此工作命令是
taskset -cpa 4-7 $(pgrep -n java)
pgrep
这里用于获取最新启动的java进程的PID。
我希望这个答案可以帮助那些试图将多个 CPU 核心分配给一个进程及其所有线程而无需使用复杂容器系统或 VM 的人。