제한된 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가 있어야 합니다.

관련 정보