仅使用有限的 CPU 内核并行运行

仅使用有限的 CPU 内核并行运行

我有一个 12 核服务器,我想运行一个脚本,该脚本将文件作为输入参数并对其进行处理。我想使用 8 个核心,不再需要在 8 个核心上一次并行处理 8 个文件,然后在 1 个核心的处理完成后跳转到下一个。

xargs我尝试过这样做:

ls /data/paths/ | grep new | xargs -i -P 8 -n 1 bash main.sh {}

但是当我看到核心时,CPU 利用率会附在快照中。在此输入图像描述

我也尝试过并行处理,如下所示:

ls /data/paths/ | grep new | parallel -j 8 --no-notice bash main.sh {}

我的条件是我必须将其限制为 8 个 CPU。

编辑:

当我运行时,ps -ef | grep main.sh它显示 11-12 个进程,而不是 8 个。

答案1

您可以使用taskset设置进程的 cpu 亲和力。以下命令将确保您的xargs命令仅使用前 8 个虚拟 CPU 核心:

ls /data/paths/ | grep new | taskset -c 0-7 xargs -i -P 8 -n 1 bash main.sh {}

请注意,从人任务集:

用户必须拥有 CAP_SYS_NICE 才能更改进程的 CPU 关联性。

相关内容