target=${1:-http://web1.com}
while true
do
for i in $(seq 10)
do
curl $target > /dev/null &
done
wait
done
저는 프로그래밍, 특히 bash의 초보자일 뿐입니다. 한 번에 10개의 HTTP 요청을 생성하여 HTTP 부하 분산을 훈련하고 싶습니다. 15000에 도달하면 요청 전송을 중지합니다.
코드는 어떻게 작성하나요? 감사해요
답변1
달성하려는 목표가 curl
총 15,000번의 호출인 경우 외부 루프를 1,500번 실행하기만 하면 됩니다.
내부 루프를 10번 실행하는 것과 비슷한 방식으로 외부 루프를 1500번 실행하면 이를 달성할 수 있습니다.
target=${1:-http://web1.com}
j=0
while [ "$j" -lt 1500 ]; do
for i in {0..9}; do
curl "$target" >/dev/null &
done
wait
j=$(( j + 1 ))
done
또는 총 호출 수를 계산하여 외부 루프를 조정하지 않고도 curl
내부 루프의 실행 수를 변경하면서도 curl
동일한 총 호출 수를 유지할 수 있습니다.
target=${1:-http://web1.com}
n=15000
while [ "$n" -gt 0 ]; do
for i in {0..9}; do
curl "$target" >/dev/null &
n=$(( n - 1 ))
done
wait
done
테스트 [ "$n" -gt 0 ]
는진짜엄격하게 0보다 큰 한 n
.
또는 n
내부 루프 내부의 축소를 방지하려면 다음을 수행하세요.
target=${1:-http://web1.com}
n=15000
while [ "$n" -gt 0 ]; do
for i in {0..9}; do
curl "$target" >/dev/null &
done
n=$(( n - 10 ))
wait
done
xargs
또는 병렬로 실행될 수 있는 유틸리티가 있고 -P
10개의 프로세스를 지속적으로 실행하려고 합니다 curl
.
target=${1:-http://web1.com}
n=15000
yes | head -n "$n" | xargs -I {} -P 10 curl "$target" >/dev/null
이는 yes
15000개의 라인을 사용 및 생성 하고 모든 라인이 소진될 때까지 항상 10개의 프로세스를 실행하는 명령 head
에 공급합니다 ( 읽은 각 라인에서 하나의 프로세스가 생성됩니다 ). 결과 줄의 실제 내용은 단일 문자 이지만 삭제되고 전혀 사용되지 않습니다.xargs
curl
curl
head
yes
y