限られた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 {}

私の条件は、CPUを8つに制限する必要があるということです。

編集する:

実行すると、ps -ef | grep main.sh8つではなく11〜12のプロセスが表示されます。

答え1

あなたはそれを使用することができますtasksetプロセスのCPUアフィニティを設定します。次のコマンドは、xargsコマンドが最初の8つの仮想CPUコアのみを使用するようにします。

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

で参照してくださいヒューマンタスクセット:

プロセスのCPUアフィニティを変更するには、ユーザーにCAP_SYS_NICEが必要です。

関連情報