Criando o cache de sistema de preenchimento de tar

3

Minha situação é bastante simples: eu copiei alguns dos meus documentos e os coloquei em um NAS e, como prefiro transferir um arquivo grande em vez de milhões, criei um tar

tar cf backup/2013-07-12-pictures.tar Pictures

Meu diretório Pictures contém cerca de 12 GB de dados e o que acontece é que meu cache é preenchido de forma constante. Se eu colocar mais alguns arquivos (por exemplo, meus projetos, seja qual for), não demorará muito e todos os meus 32 GB RAM serão usados:

sheldor:~$ free -g
             total       used       free     shared    buffers     cached
Mem:            31         31          0          0          0         27
-/+ buffers/cache:          2         28
Swap:           29          0         29

Neste ponto, embora o mouse e o sistema sejam, em geral, responsáveis, iniciar programas (que leem do disco) leva tempo. Literalmente envelhece: tenho um SSD e inicio o Chrome, o que normalmente demora apenas um segundo a cerca de 2 minutos.

Agora você encontra todas essas postagens na internet sobre o fato de que é ruim limpar o cache e assim por diante. Aqui, em Ask Ubuntu você também encontra um post que salvou minha vida, fornecendo o comando

sudo sync && sudo sysctl -w vm.drop_caches=3

Se você ler os comentários, você encontrará, por exemplo, isso aqui:

  

Isso não é um problema, é assim que funciona o cache de páginas. Ele manterá as coisas armazenadas em cache o maior tempo possível, , mas liberará itens automaticamente quando a pressão de memória de outros aplicativos aumentar. A limpeza manual é desnecessária. - Césio 22 de novembro de 2011 às 16:08

O que? Meu sistema (Intel Core i7 3,50 GHz × 8, 32 GB de RAM, NVidia Gtx 590) foi congelado após um simples alcatrão. Quero dizer, quanta pressão tenho que fazer antes que meu cache seja liberado automaticamente?

Pergunta: Existe uma maneira de ajustar as configurações para que meu cache seja limpo com mais frequência? Ou isso é apenas algo que eu tenho que viver?

    
por halirutan 12.07.2013 / 03:26

3 respostas

3

Concordo que o manuseio de cache no Linux está longe de ser ideal. De fato, em muitos aspectos, o Linux ainda se sente mais otimizado para uso de servidor / estação de trabalho do que o uso de desktop. Veja this Q & amp; A para um problema semelhante com programação de CPU / IO.

Com isso dito, existem soluções que podem aliviar o problema. Você pode limpar manualmente o cache ou configurar um cronjob, como user197590 apontou. Outro método seria desabilitar a geração de cache para aplicativos específicos. Você pode fazer isso com o utilitário nocache . No momento, ele está disponível somente nos 13.10 repos , mas eu consegui instalar o pacote Saucy no 12.04 sem problemas.

nocache é bastante simples de usar. Você o prefixou para qualquer comando que você queira executar sem cache, por exemplo:

nocache tar cf backup/2013-07-12-pictures.tar Pictures

Não é uma solução causal, mas pode definitivamente curar os sintomas de excesso de zelo.

    
por Glutanimate 09.10.2013 / 02:54
2

O uso de deamon de pré-busca de memória, como preload , é a melhor solução possível que encontrei. Faz o mesmo que o mecanismo de pré-busca do MS Windows.

Do site de pré-carregamento :

  

o pré-carregamento é um daemon readahead adaptável. Ele monitora aplicativos que   os usuários executam e, analisando esses dados, prevê quais aplicativos   os usuários podem executar e buscar esses binários e suas dependências   na memória para tempos de inicialização mais rápidos.

O pré-carregamento é garantido no repositório padrão 12.04, então

sudo apt-get install preload

E é isso. O pré-carregamento saberá quais aplicativos você está usando e cuidará do preenchimento do cache com os arquivos corretos.

Eu usei isso em PCs HDD e SSD com um ótimo efeito.

    
por Rafał Błaszczyk 10.10.2013 / 11:08
1

Você pode liberar manualmente o cache de memória com o seguinte comando simples:

sk@sk:~$ sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"

No entanto, se você quiser forçar o sistema operacional Linux a limpar o cache de memória em um intervalo específico, basta adicionar o comando ao cron job. Aqui, eu mostro como.

Abra seu terminal e digite o seguinte comando para criar um arquivo chamado cacheclear.sh. Por exemplo, eu crio o arquivo cacheclear.sh no meu diretório / home:

sk@sk:~$ sudo vi /home/cacheclear.sh

Adicione as seguintes linhas ao arquivo cacheclear.sh:

#!/bin/sh 
sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"

Salve e saia do arquivo. Agora adicione este arquivo ao crontab raiz:

sk@sk:~$ sudo crontab -e

Este comando abre o crontab raiz.

Adicione a seguinte linha ao final:

0 * * * * /home/cacheclear.sh

Salve e saia do arquivo. Quando terminar, o cron job executará esse comando a cada hora e limpará os caches de memória do sistema.

    
por user197590 09.10.2013 / 00:43

Tags