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.sh
8つではなく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が必要です。