Você pode fazer isso com significativamente redução da carga de E / S, não fazendo a cópia + truncamento. Em vez disso, renomeie o arquivo e, se o processo contiver o descritor de arquivo de log aberto, faça o que for necessário para fazer com que ele recicle seus descritores de log (normalmente, enviar um HUP
é a maneira canônica de fazer isso). Se o programa ainda não tiver esse recurso, faça um patch dele.
Ao fazer isso, você não terá a sobrecarga de E / S de uma cópia na mesma mídia (que é uma leitura + gravação simultâneas) e, em seguida, o truncamento (que pode ou não ser uma carga significativa, dependendo seu sistema de arquivos), e então a leitura para tar / compress e a carga de escrita para fazer o arquivo.
Depois de renomear os arquivos de log, você pode tar / compress / whatever em seu tempo livre. Para reduzir ainda mais a carga de E / S, considere fazer o lado de gravação do tar / compress diretamente no armazenamento de arquivamento - embora seu armazenamento em arquivamento possa não ser um dispositivo típico de acesso aleatório, ele ainda precisará de um fluxo direto de dados que estão sendo compactados em tempo real (até mesmo o S3 pode fazer isso, com a ferramenta CLI certa).
A outra coisa a considerar, ortogonal ao acima, é usar ionice
. Ao executar um programa como ionice -c 3 <command>
, você descarta a prioridade de E / S do processo para "somente ocioso" - ou seja, se houver alguma coisa mais no sistema que deseja executar / O seu programa será colidido. Essa é uma boa idéia, mas pode ser ignorada se você tiver um sistema de E / S pesado (seu programa pode levar aaaaages para ser concluído, pois raramente recebe tempo de E / S) . Nos casos em que você já está fazendo uma quantidade excessiva de E / S desnecessária, tornar a prioridade "somente ociosa" tornará o problema muito pior.
Também suspeito strongmente que o agendamento apenas ocioso não faça o que ele diz na lata; Vi pequenas lentidões no desempenho em outros processos ("melhor esforço" programado) quando programas "somente ociosos" estão em execução, em comparação a quando o processo "somente ocioso" não está em execução. Eu suspeito que isso acontece porque quando um programa pede E / S enquanto o processo "somente ocioso" está no meio de uma operação de E / S, há um atraso até que a E / S seja feita antes do "melhor esforço" A operação de E / S do processo pode ser iniciada. Ou seja, ainda é muito melhor do que se o processo "apenas ocioso" estivesse sendo executado com prioridade "melhor esforço", mas não é a correção maravilhosa - tudo o que pode parecer à primeira vista.