다른 응용 프로그램에서 호출되는 서비스가 있습니다. 다음은 제가 전화하는 서비스 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
에 설치했습니다 .make
make install
parallel
이제 성공적으로 설치한 후 디렉터리를 만들고 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 코어 수를 기준으로 병렬로 실행할 수 있는 총 작업 수를 지정합니다.