Back to TILs

Gerenciamento de memória swap

Date: 2019-12-02Last modified: 2023-02-17
Photo by Derek Oyen on Unsplash

Configuração atual

swapon --show

A saída do comando acima, se tiver swap configurado, será parecido com:

NAME      TYPE      SIZE USED PRIO
/dev/sda5 partition 2,9G   1G   -2

Neste caso uma partição foi utilizada para swap.

Outro modo de verificar o swap é:

free -h

Na ausência o valor é informado como zero.

Mem:          996Mi       262Mi        79Mi        40Mi       654Mi       514Mi
Swap:            0B          0B          0B

Verificar se existe espaço disponível para criação

Antes de criar o swap é necessário garantir que existe espaço em disco.

$ df -ah

Saída

Filesystem      Size  Used Avail Use% Mounted on
sysfs              0     0     0    - /sys
proc               0     0     0    - /proc
udev            488M     0  488M   0% /dev
devpts             0     0     0    - /dev/pts
tmpfs           100M   13M   88M  13% /run
/dev/vda1        25G   11G   14G  45% /
securityfs         0     0     0    - /sys/kernel/security
tmpfs           499M   12K  499M   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           499M     0  499M   0% /sys/fs/cgroup

Criação do arquivo de swap

Como a memória do sistema é de 1GB vamos criar um arquivo de swap com 2GB no raiz.

fallocate -l 2G /swapfile

O acesso deve ser somente do root:

chown root.root /swapfile
chmod 600 /swapfile
ls -lh /swapfile

Saída

-rw------- 1 root root 2.0G Aug 10 09:45 /swapfile

Com as permissões corretas podemos continuar marcando o espaço como swap:

mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Ativando o swap

Depois de marcado podemos disponibilizar o swap para o sistema.

swapon /swapfile
NAME      TYPE SIZE USED PRIO
/swapfile file   2G   0B   -1

Vamos verificar como os comando que já vimos anteriormente:

$ swapon --show
NAME      TYPE SIZE USED PRIO
/swapfile file   2G   0B   -1

$ free -h
              total        used        free      shared  buff/cache   available
Mem:          996Mi       263Mi        74Mi        40Mi       658Mi       513Mi
Swap:         2.0Gi          0B       2.0Gi

Tornando o swap permanente

Primeiramente faremos um backup do arquivo fstab

cp /etc/fstab /etc/fstab.bak

Agora vamos acrescentar uma linha no final do fstab

echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab

Ajustes finos

Swappiness

Este parâmetro, que varia de 0 a 100, ajusta a frequência de acesso ao swap

Para verificar a configuração atual use:

cat /proc/sys/vm/swappiness

Para definir o valor 10 use:

sysctl vm.swappiness=10

Para deixar permanente a configuração:

cp /etc/sysctl.conf /etc/sysctl.conf.bak
echo 'vm.swappiness=10' | tee -a /etc/sysctl.conf

Cache pressure

Usado para realizar cache de informações de inode e dentry possibilitando reduzir o custo de acessar esta informações frequentemente.

Para verificar o valor atual use:

cat /proc/sys/vm/vfs_cache_pressure

Saída

100

Da maneira como está agora o sistema removerá as informações sobre inode muito rapidamente. Vamos adotar uma configuração mais conservativa utilizando o valor 50.

sysctl vm.vfs_cache_pressure=50

Para deixar permanente a configuração

echo 'vm.vfs_cache_pressure=50' | tee -a /etc/sysctl.conf

Referências