다음 bash 스크립트에서 컬 백그라운드 프로세스를 동시에 실행 하고 있습니다.
START=$(date +%s)
for i in {1..100000}
do
curl -s "http://some_url_here/"$i > $i.txt&
END=$(date +%s)
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"
done
49Gb Corei7-920 전용 서버 (가상이 아님)가 있습니다.
top
명령을 통해 메모리 소비와 CPU를 추적 하며 경계에서 멀리 떨어져 있습니다.
ps aux | grep curl | wc -l
현재 컬 프로세스 수를 계산하는 데 사용 하고 있습니다. 이 수는 최대 2-4 천명까지 빠르게 증가한 다음 지속적으로 감소하기 시작합니다.
curl | awk > output
curl 프로세스보다 curl curl을 awk ( ) 로 간단한 구문 분석을 추가 하면 1-2만으로 증가하고 20-30으로 감소합니다 …
왜 프로세스 수가 급격히 감소합니까? 이 아키텍처의 경계는 어디에 있습니까?
답변
엄격한 질문에 따라 :
mycurl() {
START=$(date +%s)
curl -s "http://some_url_here/"$1 > $1.txt
END=$(date +%s)
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"
}
export -f mycurl
seq 100000 | parallel -j0 mycurl
타이밍에 상용구 텍스트가 필요하지 않은 경우 더 짧습니다.
seq 100000 | parallel -j0 --joblog log curl -s http://some_url_here/{} ">" {}.txt
cut -f 4 log
1000을 병렬로 실행하려면 파일 핸들과 같은 제한에 도달합니다. ulimit -n 또는 /etc/security/limits.conf를 높이면 도움이 될 수 있습니다.
답변
for i in {1..100000}
65536 포트만 있습니다. 이것을 조절하십시오.
for n in {1..100000..1000}; do # start 100 fetch loops
for i in `eval echo {$n..$((n+999))}`; do
echo "club $i..."
curl -s "http://some_url_here/"$i > $i.txt
done &
wait
done
(편집 :
(편집 : OS 제한에 대한 심각하게 오래된 주장을 제거하고 누락을 추가하십시오 )echo
curl
wait