GNU Parallel은 bash 스크립트를 초당 25,000번 실행하고 병렬로 처리할 수 있습니까?

GNU Parallel은 bash 스크립트를 초당 25,000번 실행하고 병렬로 처리할 수 있습니까?

웹 서버 응답을 테스트하고 있습니다. 15개의 CPU와 30GB RAM을 갖춘 컴퓨터가 있습니다. 이 컴퓨터에서 다음 bash 명령을 초당 25,000번 실행하려면 어떻게 해야 합니까?

 curl -Z url="mywebserver.com" --data "{JSON DATA}"

나는 초당 200번 쉘을 실행하는 더 나쁜 짓을 했습니다.

 seq 25000 | parallel -j0 myshell

답변1

단일 GNU 병렬 작업 실행에 따른 CPU 오버헤드는 약 1~10밀리초입니다. 이는 부분적으로는 Perl로 작성되었기 때문이지만 대부분은 뒤에서 진행되는 광범위한 보안 테스트 때문입니다.

따라서 GNU Parallel을 사용하여 초당 평균 25000개의 작업을 실행하려면 다음과 같이 하면 됩니다.

seq 1000000 | parallel -n100 --pipe --round-robin -I ,, parallel myjob {}

이를 수행하려면 약 250개의 코어가 필요합니다.

( parallel외부에서 호출할 때 대체 문자열을 대체해야 하는 parallel상황이 발생합니다. or 를 외부에서 사용하면 익숙한 것처럼 내부에서 사용할 수 있습니다.)parallel-I dummy-I ,,parallel{}parallel

핵심요약: GNU Parallel은 런타임이 중요한 매우 짧은 작업에는 적합하지 않습니다.

xargs여기에 적합한 몇 가지 보안 테스트가 있습니다.

myjob() {
  curl -Z url="mywebserver.com" --data "{JSON DATA}"
}
export -f myjob
seq 25000 | parallel --pipe --block 100 --roundrobin xargs -n1 -P0 bash -c myjob >/dev/null

내 48코어 서버에서 실행 시간은 2.6초였습니다. 따라서 필요한 1초에 아직 도달하지 못했습니다.

관련 정보