Como posso ler linhas a uma velocidade fixa?

4

Eu preciso ler um arquivo de log grande e enviá-lo por uma rede local usando (netbsd) netcat entre duas VMs na mesma estação de trabalho host.

Eu sei que o netcat tem um intervalo, mas, até onde eu sei, o menor intervalo que você pode usar é 1 linha / segundo.

A maioria dos arquivos que eu preciso enviar dessa maneira tem centenas de milhares de linhas e algumas perto de um milhão de linhas, então uma linha por segundo não é viável.

Se eu apenas usar gato, meu computador / estação de trabalho acaba por ficar atolado a ponto de ficar inutilizável.

Usando as ferramentas bash e common * nix, existe uma maneira de enviar os arquivos, mas alimentá-lo com o netcat a uma taxa de, digamos, 5-10 linhas / segundo ou algo parecido?

O objetivo final disso é permitir que eu faça alguns testes de prova de conceito para um banco de dados de log centralizado que estou considerando.

    
por Lee Lowder 18.05.2012 / 16:44

4 respostas

0

Se você usa bash e pipes, e está procurando por uma solução fácil e suja, você pode tentar usar sleep .

Você pode usar isso, que age como cat , mas com uma pausa em cada linha. %código%. Aqui está um exemplo com pouco menos de 100 linhas por segundo.

$ time (seq 1 100 | while read i; do echo "$i"; sleep 0.01; done)
[...]
real    0m1.224s
user    0m0.012s
sys     0m0.052s
    
por 18.05.2012 / 17:31
7

pv , que está disponível como pacote NetBSD , permite limitar a taxa de um pipe.

<large_file pv -L 1k | netcat …
    
por 18.05.2012 / 17:38
1

Acontece que pv é a ferramenta perfeita aqui (pelo menos pv 1.6.0). Com o sinalizador -l (modo de linha), os limites -L tornam-se linhas.

Provas simples:

seq 0 1000|pv -l -L100 > /dev/null
1k 0:00:10 [99.6 /s] [           <=>                  

seq 0 10000|pv -l -L1k > /dev/null
10k 0:00:09 [1.03k/s] [          <=>
    
por 01.06.2017 / 19:02
0

Talvez o cpulimit seja útil. Isso limita a porcentagem de tempo de CPU que um processo pode usar. A maioria das distribuições está disponível nos repositórios. O problema é que o gato e o netcat podem usar muito pouca cpu para serem realmente úteis para o acelerador.

    
por 18.05.2012 / 16:55