Introdução
Uma das maneiras mais fáceis de tornar seu servidor mais responsivo e proteger contra erros de falta de memória em seu aplicativo é adicionar um pouco mais de swap. Veja nessa materia como aumentar a área de swap do seu servidor sem precisar reiniciá-lo.
Swap é uma área em uma unidade de armazenamento em que o sistema operacional pode armazenar temporariamente dados que não podem mais manter na memória.
Isso lhe dá a capacidade de aumentar a quantidade de informações que seu servidor pode manter em sua memória de trabalho, com algumas ressalvas. Ler e escrever na área de swap é mais lento do que usar memória, mas pode fornecer uma boa margem de segurança para quando o servidor está com pouca memória.
Sem swap, um servidor que fica sem memória pode começar a matar aplicativos para liberar memória ou até mesmo travar. Isso pode causar a perda de dados não salvos ou até a inatividade. Para garantir o acesso confiável aos dados, alguns aplicativos exigem swap para funcionar.
Neste guia, abordaremos como criar e ativar um arquivo de troca em um servidor CentOS 7.
Pré-requisitos
Antes de começar com este guia, há algumas etapas que precisam ser concluídas primeiro.
Você precisará de um servidor CentOS 7 instalado e configurado com um usuário não-root que tenha privilégios sudo.
Depois de ter seu usuário não-root, você pode usá-lo para o SSH em seu servidor do CentOS e continuar com a instalação do seu arquivo de troca.
Verifique a área de troca
Antes de começarmos, devemos dar uma olhada no armazenamento do nosso servidor para ver se já temos alguma área de swap disponível. Embora possamos ter várias áreas de swap ou partições de swap, geralmente uma deve ser suficiente.
Podemos ver se o sistema tem algum swap configurado usando o swapon, um utilitário de swap. Com o sinalizador -s, o swapon exibirá um resumo do uso e disponibilidade do swap em nosso dispositivo de armazenamento:
swapon -s
$ swapon -s Filename Type Size Used Priority /dev/sda2 partition 4194300 19224 -1
No exemplo acima a área de swap é de 4GB
Se nada for retornado pelo comando, o resumo estará vazio e não haverá arquivo de troca.
Outra maneira de verificar o espaço de troca é com o utilitário gratuito, free
que nos mostra o uso geral de memória do sistema. Podemos ver nossa memória atual e trocar o uso (em megabytes) digitando:
$ free -m total used free shared buffers cached Mem: 3832 3098 733 0 156 1734 -/+ buffers/cache: 1206 2625 Swap: 4095 18 4077
Como você pode ver, o total de swap é 4095, que bate com o valor retornado pelo swapon
Checando o espaço de armazenamento disponível
A maneira típica de alocar espaço para troca é usar uma partição separada dedicada à tarefa. No entanto, alterar o esquema de partição nem sempre é possível devido a restrições de hardware ou software. Felizmente, podemos facilmente criar um arquivo de troca que resida em uma partição existente.
Antes de fazer isso, devemos estar cientes de nosso uso atual da unidade. Podemos obter essa informação digitando:
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 55G 5.4G 47G 11% / tmpfs 1.9G 0 1.9G 0% /dev/shm
Nota: o sinalizador -h
simplesmente diz ao dh
para gerar informações sobre a unidade em um formato de leitura amigável (human readable). Por exemplo, em vez de gerar o número bruto de blocos de memória em uma partição, df -h
nos informará o uso e a disponibilidade de espaço em M (para megabytes) ou G (para gigabytes).
Como você pode ver na primeira linha, nossa partição de armazenamento tem 47 gigabytes disponíveis, então temos um pouco de espaço para trabalhar. O valor do espaço livre varia muito de servidor pra servidor e até mesmo em VPS, instâncias Amazon, Google Cloud, etc.
Embora haja muitas opiniões sobre o tamanho apropriado de uma área de swap, ele realmente depende dos requisitos de sua aplicação e de suas preferências pessoais. Geralmente, um valor igual ou o dobro da quantidade de memória no seu sistema é um bom ponto de partida.
Como meu sistema tem 4 gigabytes de memória, e dobrando isso tiraria um pedaço maior do meu espaço de armazenamento do que eu estou disposto a separar, criarei uma área de swap de 4 gigabytes para corresponder à memória do meu sistema.
Criar um arquivo de swap
Agora que conhecemos nosso espaço de armazenamento disponível, podemos criar um arquivo de troca dentro do nosso sistema de arquivos. Vamos criar um arquivo chamado swapfile em nosso diretório raiz (/), mas você pode nomear o arquivo de outra forma, se preferir. O arquivo deve alocar a quantidade de espaço que queremos para o nosso arquivo de troca.
A maneira mais rápida e fácil de criar um arquivo de troca é usando o fallocate
. Esse comando cria instantaneamente um arquivo de tamanho pré-alocado. Podemos criar um arquivo de 4 gigabytes digitando:
$ sudo fallocate -l 4G /swapfile
Depois de inserir sua senha para autorizar privilégios de sudo, o arquivo de troca será criado quase instantaneamente, e o prompt será retornado para você. Podemos verificar que a quantidade correta de espaço foi reservada para swap usando ls
:
$ ls -lh /swapfile -rw-r--r--. 1 root root 4,0G jul 25 14:58 /swapfile
Como você pode ver, nosso arquivo de troca foi criado com a quantidade correta de espaço reservado.
Ativando um arquivo de swap
Neste momento, nosso arquivo é criado, mas nosso sistema não sabe que ele deve ser usado para swap. Precisamos dizer ao nosso sistema para formatar este arquivo como swap e então ativá-lo.
Antes de fazermos isso, devemos ajustar as permissões em nosso arquivo de swap para que ele não seja legível por ninguém além da conta raiz. Permitir que outros usuários leiam ou gravem neste arquivo seria um grande risco à segurança. Podemos bloquear as permissões com chmod
, posteriormente usaremos o mkswap
para dizer ao sistema que esse arquivo é um arquivo do tipo swap:
$ sudo chmod 600 /swapfile $ sudo mkswap /swapfile mkswap: /swapfile: aviso: apagando assinaturas antigas de swap. Configurando espaço de swap versão 1, tamanho = 4 GiB (4294963200 bytes) nenhum rótulo, UUID=be734ef0-30a8-42fe-bfcc-53b356d6694d
Por último, vamos ativar o swap com o comando swapon
.
$ sudo swapon /swapfile
Vamos checar se ele está ativo.
$ swapon -s Nome do arquivo Tipo Tamanho Usado Prioridade /dev/sda2 partition 8204284 0 -2 /swapfile file 4194300 0 -3
O comando acima confirma que temos uma área de swap do tipo arquivo com tamanho de 4GB.
Faça o arquivo de troca permanente
Nosso arquivo de troca está habilitado no momento, mas quando nós reinicializamos o servidor, ele não ativará automaticamente o arquivo para uso. Para tornar ele permanente mesmo que o servidor seja reiniciado devemos adicionar uma linha em /etc/fstab
para que ele seja montado automaticamente.
Edite o arquivo com privilégios sudo no seu editor de texto:
$ sudo vim /etc/fstab
No final do arquivo, adicione a seguinte linha
/swapfile swap swap sw 0 0
Salve o arquivo e feche. Agora o swap estará disponível sempre que reiniciar o servidor.
Dica de desempenho
Embora a troca geralmente seja recomendada para sistemas que utilizam discos rígidos tradicionais, o uso de swap com SSDs pode causar problemas com a degradação do hardware ao longo do tempo. Devido a essa consideração, não é recomendado a ativação da troca em discos SSD em seus servidores ou em provedores que oferecem armazenamento SSD.
Se você precisa melhorar o desempenho do seu servidor de forma permanente, recomendamos o uso de mais memória ou discos separados para área de swap.
Fonte: Josh Barnett
2 comentários
André Giovanini · 8 de abril de 2021 às 07:59
[alpha7@vps28320 ~]$ swapon -s
Filename Type Size Used Priority
/dev/xvda2 partition 1023996 256 -2
[alpha7@vps28320 ~]$ free -m
total used free shared buff/cache available
Mem: 15858 6254 192 175 9411 9100
Swap: 999 0 999
[alpha7@vps28320 ~]$ df -h
Sist. Arq. Tam. Usado Disp. Uso% Montado em
devtmpfs 7,8G 0 7,8G 0% /dev
tmpfs 7,8G 4,0K 7,8G 1% /dev/shm
tmpfs 7,8G 34M 7,8G 1% /run
tmpfs 7,8G 0 7,8G 0% /sys/fs/cgroup
/dev/xvda3 249G 155G 95G 63% /
/dev/xvda1 240M 79M 145M 36% /boot
tmpfs 1,6G 40K 1,6G 1% /run/user/1000
[alpha7@vps28320 ~]$ sudo fallocate -l 4G /swapfile
[sudo] senha para alpha7:
[alpha7@vps28320 ~]$ ls -lh /swapfile
-rw-r–r– 1 root root 4,0G Abr 8 07:55 /swapfile
[alpha7@vps28320 ~]$ sudo chmod 600 /swapfile
[alpha7@vps28320 ~]$ sudo mkswap /swapfile
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=301dd103-285d-405c-90b5-2859f31c7db8
[alpha7@vps28320 ~]$ sudo swapon /swapfile
swapon: /swapfile: swapon failed: Argumento inválido
[alpha7@vps28320 ~]$ sudo swapon -v /swapfile
swapon /swapfile
swapon: /swapfile: found swap signature: version 1, page-size 4, same byte order
swapon: /swapfile: pagesize=4096, swapsize=4294967296, devsize=4294967296
swapon: /swapfile: swapon failed: Argumento inválido
Cleberson · 12 de maio de 2021 às 20:46
Fiquei meio sem entender.