Reduza o uso do SWAP e melhore o desempenho do Linux

Na lista de coisas que se pode fazer para melhorar o desempenho do Linux, este é um dos primeiros itens — principalmente em equipamentos com pouca memória RAM (1 Gb ou menos).
Algumas distribuições Linux mais parrudas, como é o caso do Ubuntu, acabam por fazer uso muito intenso do acesso ao disco rígido, o que contribui consideravelmente para a lentidão do sistema como um todo.
Não esqueça de ler o texto Perguntas e Respostas sobre o SWAP, para tirar mais dúvidas sobre este assunto. 😉
disco rígido ubuntuNeste post, vou mostrar como reduzir o uso da memória SWAP no seu sistema.
Comumente, separamos uma partição exclusiva, no disco rígido, para a memória SWAP o que é uma boa prática.
Quando o sistema começa a fazer uso excessivo deste recurso, começa também a ficar mais lento, uma vez que o tempo de acesso ao disco rígido é milhares de vezes maior que o tempo de acesso à memória RAM.
A propensão do Ubuntu a usar o SWAP é determinada por um valor — quanto menor este valor, mais tempo o sistema irá demorar antes de começar a fazer uso deste recurso.
A variável (do sistema) que contém este valor, é a swappiness — e pode ir de 0 a 100 (sim, é um percentual).
Sugiro a leitura do artigo Explicação básica sobre gestão de memória no Linux, onde o uso do SWAP é discutido com mais profundidade —. Ele não é o responsável pela lentidão da sua máquina. Acredite.

Owen Wilson - Swapiness Linux
No Red Hat e no Ubuntu, o valor padrão do swappiness, é 60, o que pode ser muito alto para a maioria dos usuários normais do desktop. Especialistas indicariam este número como mais adequado para servidores.
No desktop, este número pode seguramente ser reduzido. Vou mostrar como.
No Ubuntu, esta variável fica armazenada no arquivo de sistema /proc/sys/vm/swappiness.
Você pode ver o valor de swappiness do seu sistema com o seguinte comando:

cat /proc/sys/vm/swappiness
O QUE DIZ A DOCUMENTAÇÃO DO RED HAT

«O swapiness é um valor de 0 à 100 que controla o grau para o qual o sistema altera. Um valor alto dá prioridade ao desempenho do sistema, alterando os processos de forma agressiva fora da memória física quando eles não estão ativos. Um valor baixo dá prioridade à interação e evita processos de alteração fora da memória física o quanto de tempo for possível, o que diminui a latência de resposta. O valor padrão é 60.»

Qual o valor mais indicado para swappiness?

Você pode seguir a regra geral, ditada por outros, ou pode fazer seus testes e chegar ao melhor número por si próprio. Só tenha cuidado com os extremos, pois você pode acabar com um sistema inoperante (ou quase).
A minha recomendação é de que você opte por um valor baixo, entre 10 e 20. Isto fará com que o sistema use menos o espaço de troca (swap) e tente se virar com o que tem, na memória física.
Veja, a seguir, como tornar a mudança do valor do swapiness permanente.

Torne a mudança permanente

A simples alteração do arquivo /proc/sys/vm/swappiness, é temporária e não produz resultado permanente.
Se você conseguir alterar este valor, o sistema o retornará ao padrão, assim que for reiniciado.
Contudo, é interessante testar valores diferentes, antes de decidir sobre qual é o mais adequado para o seu uso.
Você precisa alterar o arquivo /etc/sysctl.conf, para que a mudança seja permanente.
Abra-o com o seu editor de textos favorito (eu vou usar o nano):

sudo nano /etc/sysctl.conf

Agora, copie e cole o seguinte código ao final do arquivo:

#
# Reduz o uso de SWAP
vm.swappiness=10
# Melhora a gestão de cache
vm.vfs_cache_pressure=50

Em seguida, salve e saia do editor.
Reinicie a máquina e veja se houve melhora.

A conclusão de que a partição ou arquivo de swap está tornando o seu computador lento é, na maioria das vezes, equivocada.
Além disto, não ter qualquer dispositivo para fazer swap, não significa que o kernel passará a fazer uso mais eficiente da memória física presente no sistema.
A falta deste recurso implica em ter menos opções à disposição do kernel para gerenciar eficientemente a memória do sistema.
Tampouco, a quantidade de swap disponível não influencia a frequência com que ele será usado.
O Linux consegue lidar com a ausência de um espaço de troca.
Quando a memória física se exaurir, contudo, o kernel iniciará uma “matança quase indiscriminada de processos” no seu sistema, para criar espaço de trabalho. Para isto existe um mecanismo chamado OOM-Killer ou out-of-memory-killer.

conclusão

Antes de alterar o valor do swappiness, leve em consideração que o valor deste parâmetro do kernel indica a partir de que ponto o sistema deve começar a fazer uso do SWAP — se o valor for ’60’, o kernel começará a usar o SWAP quando a memória RAM atingir 40% de sua capacidade.
Ajustar o parâmetro para ‘100’, fará com que o kernel envie tudo pro SWAP.
No meu exemplo, ajustei o swappiness para ’10’ — assim o SWAP só começará a ser usado quando a memória RAM estiver 90% cheia.
O valor que eu usei é seguro em sistemas com 2 Gb ou mais.
Se você ajustar o valor para ‘0’ o sistema só irá swapear quando a memória RAM estiver esgotada.
Em sistemas com 1Gb de memória RAM ou menos, usar valores muito baixos pode causar travamentos.
A minha compreensão é de que o uso do SWAP é para situações extraordinárias, quase “emergenciais”. Não faz sentido, portanto, usar memória virtual na maioria dos casos.
Se a carga de trabalho é grande, você deve planejar a aquisição de mais memória física, em vez de resolver (mal) o problema com o uso de memória virtual.

Como verificar e consertar seu sistema de arquivos no Ubuntu

O sistema de arquivos do seu HD pode ter problemas, pelas mais variadas razões. Este artigo é sobre como checar e, se houver erros, corrigi-los, com o comando fsck.
Uma situação típica, em que podem ocorrer, não somente perda de dados, mas danos ao seu sistema de arquivos é a situação de falta de energia.
Você reinicia o sistema e ele pára, pedindo para que você faça o reparo manualmente do seu sistema de arquivos.

Como usar o fsck para reparar o sistema de arquivos

O fsck (file system consistency check — verificação da consistência do sistema de arquivos) é um programa usada para encontrar erros no sistema de arquivos e corrigi-los.
Enquanto ferramenta de manutenção da integridade dos seus dados, é bom usá-la com frequência – especialmente em caso de o seu sistema ser desligado de forma irregular.
Para usar o fsck, em um ambiente seguro, tal como vou descrever aqui, você precisará ter privilégios administrativos.
O comando pode ser executado, como root, sozinho:

fsck

Nestas condições, ele irá perscrutar todas as partições descritas em /etc/fstab.
O modo certo de usar o fsck, contudo, é no Runlevel 1, o modo monousuário. Neste runlevel, o seu PC pode se tornar indisponível para o ambiente gráfico – é o equivalente ao modo de segurança no Windows.
Para reiniciar o sistema no runlevel 1, execute o seguinte comando:

init 1

em, seguida, desmonte a partição em que o fsck será executado.
Se quiser obter uma lista das partições que se encontram montadas e onde estão montadas no seu sistema, use o comando:

cat /etc/mtab

ou para saber exatamente onde está montada a sua partição /home:

cat /etc/mtab | grep home
/dev/sda3 /home ext3 rw 0 0

(vou usar a partição /dev/sda3, neste exemplo):

umount /dev/sda3

ou pelo seu nome:

umount /home

Agora execute o fsck:

fsck /dev/sda3

Se preferir não ter que responder a todas as perguntas feitas pelo fsck, use o modo -y. Assim, o fsck executará a verificação e aplicará as correções necessárias, sem te importunar com questões técnicas:

fsck -y /dev/sda3

Se houver arquivos danificados e estes forem recuperados pelo fsck, ele os guardará no diretório /home/lost+found
Ao terminar o processo, você pode reiniciar o computador ou apenas montar de volta a partição desmontada:

mount /home

E volte ao runlevel multiusuário:

init 2

Simples, assim.

LEIA TAMBÉM

Como monitorar o uso do HD (disco rígido) no Linux

O IOTOP é uma ferramenta semelhante ao TOP, no Linux, voltado para monitoramento do fluxo de informações de Entrada/Saída.
Sabe aquele problema em que você percebe que a máquina está usando/acessando excessivamente o disco rígido?
O iotop é uma das ferramentas que pode ajudar a esclarecer o que está havendo.
Um outro ponto, que precisa ser destacado, é que o iotop só vai funcionar no modo admnistrador. Mas, se você pode instalar programas no sistema, então provavelmente é o administrador – e eu não sei por que estou falando isto pra você. 🙂

LEIA MAIS:

Como instalar o iotop

Se a sua distro for baseada no Debian (Ubuntu, Linux Mint etc) use o seguinte comando para instalar o astro deste artigo:

sudo apt-get install iotop

No SuSE fica assim:

sudo yum install iotop

Como executar o iotop

Como já foi dito, o aplicativo precisa de privilégios administrativos para rodar no seu sistema. Você pode resolver isto com o comando sudo. Veja:

sudo iotop

Na parte superior, uma barra informa as taxas totais de leitura (read) e escrita (write) em relação ao HD. Em seguida, as taxas relativas a cada proceso ou threads são relacionadas.
iotop Captura de tela de 2013-03-17 10:31:27
Quem conhece o comando top, vai querer saber se há como customizar o iotop. É claro que sim.
Em vez de ver todas as threads ou processos que estão acessando o HD, pressione a tecla o e veja como um monte de informação desnecessária “desaparece” da tela:
iotop -o Captura de tela de 2013-03-17 10:38:03
Com uma visualização mais “limpa”, pode ficar mais fácil entender o que está acontecendo.
Se você quiser, pode acompanhar apenas um processo, como o do aplicativo transmission (cliente para baixar torrents). Para isto, primeiro você precisa descobrir o PID do processo e depois iniciar o iotop. Veja como:

deckard@Nexus6:~$ ps aux | grep transmission
deckard   <b>3487</b> 15.5  5.6 237420 115012 ?       Sl   09:23  15:51 transmission-gtk /tmp/.fr-m8WEzj/The.Pirate.Bay.AFAK(HDTV-x264-ASAP)[VTV].torrent

Note que o meu PID é 3487. No seu sistema, o valor será diferente. Fique atento a isso.
ps aux | grep transmission 13-03-17 11:05:44
De posse do seu PID informe-o ao iotop, conforme o exemplo:

sudo iotop --pid=3487

E note que apenas as informações referentes ao PID do programa selecionado serão exibidas na tela (no meu caso, o transmission).
Outra forma de acompanhar o transmission, que faz uso relativamente intenso do seu HD – o que pode depender da quantidade de arquivos envolvidos em processos de uploads/downloads é usar a opção de cumulatividade em conjunto com o filtro de processos ativos, assim:

sudo iotop -ao

Desta forma, muitas informações desnecessárias são inibidas e o relatório acumula os valores das taxas de entrada/saída de dados do seu HD.
iotop - oa Captura de tela de 2013-03-17 10:29:27