bash 쉘 스크립트에서 서비스 URL을 병렬로 호출하는 방법은 무엇입니까?

bash 쉘 스크립트에서 서비스 URL을 병렬로 호출하는 방법은 무엇입니까?

다른 응용 프로그램에서 호출되는 서비스가 있습니다. 다음은 제가 전화하는 서비스 URL입니다.

http://www.betaservice.domain.host.com/web/hasChanged?ver=0

위 서비스 URL을 순차적으로 하나씩 호출하는 대신 멀티스레드 방식으로 로드 테스트를 수행해야 합니다.

bash 쉘 스크립트가 다중 스레드 방식으로 호출하여 위의 서비스 URL을 로드할 수 있는 방법이 있습니까? 가능하다면 위의 URL을 매우 빠르게 병렬로 호출하는 60-70개의 스레드를 가질 수 있습니까?

답변1

멀티스레딩이라고 부르지는 않겠지만 간단히 백그라운드에서 70개의 작업을 시작할 수 있습니다.

for i in {1..70}; do 
   wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0 2>/dev/null &
done

그러면 70개의 프로세스가 동시에 실행됩니다 wget. 다음과 같은 작은 스크립트와 같이 좀 더 복잡한 작업을 수행할 수도 있습니다.

#!/usr/bin/env bash

## The time (in minutes) the script will run for. Change 10
## to whatever you want.
end=$(date -d "10 minutes" +%s);

## Run until the desired time has passed.
while [ $(date +%s) -lt "$end" ]; do 
    ## Launch a new wget process if there are
    ## less than 70 running. This assumes there
    ## are no other active wget processes.
    if [ $(pgrep -c wget) -lt 70 ]; then
        wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0 2>/dev/null &
    fi
done

답변2

ab를 시도하면 좋은 통계도 얻을 수 있습니다.

ab -n 10000 -c 70 http://www.betaservice.domain.host.com/web/hasChanged?ver=0

이 호출은 70개의 병렬 쿼리와 동시에 10,000개의 요청을 실행합니다.

답변3

GNU Parallel을 설치해 볼 수 있습니다. 다음에서 GNU 병렬 예제를 얻을 수 있습니다.여기.

시험

내 컴퓨터의 소스에서 설치했으며 gnu-parallel작동하게 할 수 있습니다.

소스 코드에서 설치할 수 있습니다여기. 저는 Redhat 시스템을 가지고 있기 때문에 fedora 패키지를 다운로드하고 실행하여 시스템 .configure에 설치했습니다 .makemake installparallel

이제 성공적으로 설치한 후 디렉터리를 만들고 checking다음 명령을 실행했습니다.

seq 10 | parallel -n0  wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0

예상대로 위 명령은 웹페이지 복사본 10개를 다운로드했습니다. 원하는 번호를 설정하여 사용할 수 있습니다 seq.

동일한 명령을 병렬로 실행하는 방법에 대한 자세한 내용은 gnu-parallel에서 제공하는 예제를 확인하세요.여기. 예시 페이지에서

동일한 매개변수를 사용하여 동일한 명령을 10번 병렬로 실행하려면 다음과 같이 하십시오.

시퀀스 10 | 병렬 -n0 my_command my_args

편집하다

이제 parallel실행을 활용하기 위해 다음 명령을 사용할 수 있습니다.

 seq 70 | parallel -j70 wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0

-j옵션은 총 CPU 코어 수를 기준으로 병렬로 실행할 수 있는 총 작업 수를 지정합니다.

관련 정보