僅使用有限的 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 關聯性。

相關內容