Executando milhares de processos em segundo plano em paralelo no script bash

11

Estou executando milhares de processos de plano de fundo curl em paralelo no seguinte script 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

Eu tenho 49Gb Corei7-920 servidor dedicado (não virtual).

Eu acompanho o consumo de memória e CPU através do comando top e eles estão longe dos limites.

Estou usando ps aux | grep curl | wc -l para contar o número de processos curl atuais. Este número aumenta rapidamente até 2-4 mil e depois começa a diminuir continuamente.

Se eu adicionar uma análise simples através da ondulação da tubulação ao awk ( curl | awk > output ) do que o número do processo de curvatura, aumente para apenas 1-2 mil e, em seguida, diminua para 20-30 ...

Por que o número de processos diminui tão drasticamente? Onde estão os limites dessa arquitetura?

    
por zavg 07.11.2013 / 17:53

2 respostas

11

Seguindo a pergunta estrita:

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

Mais curto, se você não precisar do texto padronizado ao redor dos horários:

seq 100000 | parallel -j0 --joblog log curl -s http://some_url_here/{} ">" {}.txt
cut -f 4 log

Se você deseja rodar 1000s em paralelo, você atingirá alguns limites (como identificadores de arquivo). Levantar o ulimit -n ou o /etc/security/limits.conf pode ajudar.

    
por 02.08.2014 / 20:07
2
for i in {1..100000}

Existem apenas 65536 portas. Acelerar isso.

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

(editar: echo curl
(edit: tira uma declaração severamente datada sobre os limites do sistema operacional e adiciona os wait ausentes)

    
por 18.11.2013 / 21:15