está escrevendo para armazenamento lento no modo nohup bloqueando o processo?

0

Se eu tenho um processo escrevendo para nohup e o armazenamento onde ele grava é lento, ele bloqueia o processo que está sendo executado no nohup? Por exemplo:

processo A está rodando no nohup, ele precisa escrever 10 linhas no console

leva 2 minutos para o armazenamento em disco gravar essas 10 linhas em nohup.out (ele grava 6 linhas e depois fica preso por um minuto esperando pelo disco)

o processo A está bloqueado até que as linhas restantes possam ser escritas ou não?

    
por Petr 14.01.2013 / 09:30

2 respostas

1
O modo

nohup não tem relevância se o processo está limitado por E / S. Então, sim, o armazenamento lento provavelmente atrasará o processo.

Se o processo tiver saída em rajadas (por exemplo, 10 linhas a cada 1 hora), mas taxa de transferência inferior ao armazenamento "lento", você poderá melhorar o desempenho, por exemplo, escrevendo para um pipe ou um FIFO (que então é copiado para o armazenamento lento por outro processo), desde que uma explosão de saída não exceda o buffer do pipe.

mkfifo /tmp/fifo
nohup prog >/tmp/fifo &
cat </tmp/fifo >slow_log_file &

ou

nohup prog | buffer -s 16k >slow_log_file &

onde o buffer é um programa especial (disponível no Debian com apt-get install buffer ) que mantém uma fila interna grande para evitar o bloqueio do gravador.

Ou, se você controlar o código-fonte, poderá implementar o buffer por conta própria e talvez usar um processo de registro separado para gravar no armazenamento lento. Eu sei que o djbdns (famoso por sua estabilidade) usa um processo logger.

    
por 14.01.2013 / 09:53
0

Como um processo normal que produz IO enorme, ele será bloqueado. Mas geralmente os blocos do sistema de arquivos são armazenados em cache na memória. E quando o sistema operacional tentar escrever blocos sujos no disco, você verá que a coluna de espera na saída superior se torna 100%

    
por 14.01.2013 / 09:55

Tags