제한된 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를 소유해야 합니다.

관련 정보