다음 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으로 감소합니다 ...
왜 프로세스 수가 급격히 감소합니까? 이 아키텍처의 경계는 어디에 있습니까?
나는 또한
—
zhenech
parallel(1)
이러한 작업을 사용 하는 것이 좋습니다 : manpages.debian.org/cgi-bin/…
시도
—
추후 공지가있을 때까지 일시 중지되었습니다.
start=$SECONDS
와 end=$SECONDS
-와 쉘 변수 잠재적 이름 충돌을 방지하기 위해 습관 소문자 또는 혼합 경우 변수 이름을 사용합니다. 그러나 각 프로세스의 시작 시간이 점점 증가하고 있습니다. 프로세스가 백그라운드에 있고 start
한 번만 계산 되므로 다운로드 시간이 오래 걸리지 않습니다 . Bash에서는 (( diff = end - start ))
달러 기호를 삭제하고 간격을보다 유연하게 할 수 있습니다. pgrep
가지고 있다면 사용하십시오 .
HBruijn에 동의합니다. 프로세스 수를 두 배로 늘릴 때 (을 추가하여
—
추후 공지가있을 때까지 일시 중지되었습니다.
awk
) 프로세스 수가 절반으로 줄어 듭니다 .
@zhenech @HBrujin 나는
—
zavg
parallel
파일 핸들의 시스템 제한으로 인해 500 개의 병렬 작업을 실행할 수 있다고 말합니다. limits.conf에서 제한을 늘 렸지만 이제 5000 개의 simulaneus 작업을 실행하려고하면 모든 parallel
perl 스크립트가 32Mb를 사용 하기 때문에 시작하기 전에도 모든 메모리 (49Gb)를 즉시 먹습니다 .
ulimit
그 한계 중 일부를 보여줄 것입니다.