
Temos um trabalho cronizado em um servidor web de produção que requer o taring de arquivos de todo o sistema de arquivos. Ele é executado por cerca de 105 minutos e, durante esse tempo, o Apache inicia a troca porque toda aquela leitura de alguns gigas de arquivos expandiu a quantidade de memória do cache do sistema de arquivos.
Os dados que o tar está lendo não precisam permanecer no cache do sistema de arquivos. Vai para o tarfile e pronto. Existe algo onde podemos dizer like tar cvf whatever/ --no-system-file-buffer-reads
? Minha leitura de man tar
não revela nada que pareça ajudar.
Você não precisa apontar que isso pode ser visto como uma situação do tipo "Doutor, dói quando eu faço assim! Então não faça assim". De alguma forma, precisamos despejar os arquivos em um arquivo tar, então não fazer isso não é uma opção.
Responder1
Acho que isso foi respondidoaqui:
Existe onocacheutilitário, que pode ser anexado a um comando como ionice e nice. Ele funciona pré-carregando uma biblioteca que adiciona
posix_fadvise
oPOSIX_FADV_DONTNEED
sinalizador a qualquer chamada aberta.Em termos simples, avisa ao kernel que o cache não é necessário para aquele arquivo específico; o kernel normalmente não armazenará o arquivo em cache. Veraquipara detalhes técnicos.
Ele faz maravilhas para qualquer grande trabalho de cópia, por exemplo, se você deseja fazer backup de um disco de vários terabytes em segundo plano com o menor impacto possível no sistema em execução, você pode fazer algo junto
nice -n19 ionice -c3 nocache cp -a /vol /vol2
.