Quando uma instância ECS da Alibaba Cloud está com pouca memória física, configurar o espaço de swap é uma solução de emergência econômica. Esse recurso utiliza espaço em disco como memória virtual para evitar erros de falta de memória (OOM) e manter o sistema em execução quando a memória física se esgota.
Se uma instância ECS estiver com pouca memória, recomendamos primeiro aumentar a memória física por meio da alteração do tipo de instância.
Não recomendamos o uso de partição swap em disco básico, pois o baixo desempenho de I/O pode causar gargalos no sistema. Para outros tipos de discos em nuvem, utilize a partição swap conforme sua necessidade. No entanto, configure-a adequadamente para evitar trocas frequentes de páginas e manter a estabilidade do sistema.
Método 1: Usar o plugin do Cloud Assistant (recomendado)
Para configurar automaticamente uma partição swap, instale o Agente do Cloud Assistant. Caso sua instância não suporte o Cloud Assistant ou não seja possível instalar o agente, utilize o Método 2 para configurar o swap manualmente.
Ativar a partição swap
-
Faça login em uma instância ECS.
Acesse ECS console - Instances. No canto superior esquerdo, selecione a região e o grupo de recursos da instância desejada.
Acesse a página de detalhes da instância alvo. Clique em Connect e selecione Workbench. Siga as instruções na tela para acessar o terminal.
-
Execute o comando a seguir para ativar a partição swap.
acs-plugin-manager --exec --plugin ACS-ECS-SwapConfig --params --enableA saída abaixo indica que a partição swap foi ativada com sucesso.
[INFO] The system support auto config swap partition. [INFO] Alibaba Cloud Swap Configuration Document:https://www.alibabacloud.com/help/en/ecs/support/how-do-i-configure-the-swap-partition-of-a-linux-instance [INFO] Turn On Swap...... [INFO] RAM size: 8 G [INFO] Swap size: 8 G [INFO] Check disk available size...... [INFO] Disk available size: 33 G [INFO] Disk available size enough [INFO] Recover swap configuration from /etc/fstab [INFO] Config vm.swappiness=20 to /etc/sysctl.conf [SUCCESS] Swap has been turned on.NotaO plugin define automaticamente o tamanho da partição swap com base na memória do sistema, seguindo estas regras:
Se RAM ≤ 2 GB, então Tamanho do Swap = RAM × 2.
Se 2 GB < RAM ≤ 8 GB, então Tamanho do Swap = RAM.
Se RAM > 8 GB, não é recomendado usar partição swap.
Também não se recomenda criar partição swap se isso resultar em menos de 5 GB de espaço disponível em disco.
O valor padrão do parâmetro
vm.swappinessé 20. Para personalizar o tamanho da partição swap, consulte Método 2: Configurar manualmente uma partição swap.
Verificar o status da partição swap
Execute o comando a seguir para verificar o status da partição swap.
acs-plugin-manager --exec --plugin ACS-ECS-SwapConfig --params --status
A saída abaixo indica que a partição swap está ativada.
[INFO] The system support auto config swap partition.
[INFO] Alibaba Cloud Swap Configuration Document:https://www.alibabacloud.com/help/en/ecs/support/how-do-i-configure-the-swap-partition-of-a-linux-instance
[INFO] ========== Swap status ==========
NAME TYPE SIZE USED PRIO
/swapfile file 8G 0B -2
[INFO] Swap is enabled
Desativar a partição swap
Execute o comando a seguir para desativar a partição swap.
acs-plugin-manager --exec --plugin ACS-ECS-SwapConfig --params --disable
A saída abaixo indica que a partição swap foi desativada com sucesso.
[INFO] The system support auto config swap partition.
[INFO] Alibaba Cloud Swap Configuration Document:https://www.alibabacloud.com/help/en/ecs/support/how-do-i-configure-the-swap-partition-of-a-linux-instance
[INFO] Turn Off Swap......
[INFO] Cancel swap configuration from /etc/fstab
[INFO] Config vm.swappiness=0 to /etc/sysctl.conf
[INFO] Deleted swapfile: /swapfile
[SUCCESS] Swap has been turned off.
Método 2: Configuração manual
Ativar a partição swap
Etapa 1: Verificar o status atual do swap
Antes de começar, verifique se o sistema já possui alguma configuração de swap para evitar conflitos.
-
Faça login em uma instância ECS.
Acesse ECS console - Instances. No canto superior esquerdo, selecione a região e o grupo de recursos da instância desejada.
Acesse a página de detalhes da instância alvo. Clique em Connect e selecione Workbench. Siga as instruções na tela para acessar o terminal.
-
Verifique a configuração da partição swap.
swapon --showCaso o comando não retorne nenhuma saída, não há swap configurado e você pode prosseguir para a próxima etapa.
-
Se houver uma saída semelhante à mostrada abaixo, já existe um espaço de swap ativo. Nesse caso, desative e limpe o arquivo de swap ou crie um novo arquivo de swap em um disco diferente.

Etapa 2: Criar e configurar o arquivo de swap
-
Crie um arquivo de swap.
Este exemplo mostra como criar um
/swapfilede 1 GiB. Recomendamos o uso do comandofallocate, pois aloca espaço instantaneamente e é muito mais eficiente que odd.# Create a 1 GiB swap file sudo fallocate -l 1G /swapfileSe o sistema de arquivos (como versões antigas do XFS) não suportar
fallocate, o sistema retornará o errofallocate failed: Operation not supported. Nessa situação, utilize o comandoddpara criar o arquivo, embora esse processo seja mais demorado.sudo dd if=/dev/zero of=/swapfile bs=1M count=1024O valor
/swapfiledo parâmetroofé uma variável personalizável que representa o identificador da partição swap e não pode ser igual a um identificador de partição existente.Os valores de
bsecountdeterminam o tamanho do arquivo de swap e podem ser personalizados. Por exemplo,bs=1M count=1024define o tamanho do arquivo de swap como 1 GB.
-
Defina permissões seguras.
Para impedir que usuários sem privilégios de root leiam o arquivo de swap, que pode conter dados sensíveis como senhas e chaves, defina suas permissões como
600.sudo chmod 600 /swapfile -
Marque o arquivo como espaço de swap.
sudo mkswap /swapfileUma resposta bem-sucedida será semelhante à seguinte:
Setting up swapspace version 1, size = 1 GiB (1073737728 bytes) no label, UUID=a1a7e24c-38f6-41a4-9e18-be60b631133aNota : O tamanho do arquivo de swap deve ser maior que 40 KB. Caso contrário, o comando
mkswapreportará um erro.
Etapa 3: Ativar e verificar o arquivo de swap
Ative o arquivo de swap recém-criado e confirme se o sistema o reconheceu.
-
Ative o arquivo de swap.
sudo swapon /swapfile -
Verifique se o swap está ativado.
swapon --showApós a ativação bem-sucedida, a saída será semelhante a esta:
NAME TYPE SIZE USED PRIO /swapfile file 1G 0B -2Alternativamente, execute
free -h. A linhaSwapdeve exibir o tamanho total.
Etapa 4: Garantir persistência
Grave a configuração do swap no arquivo /etc/fstab para garantir que o swap permaneça efetivo após reinicializações da instância.
-
(Recomendado) Faça backup do arquivo
fstabpara prevenir erros operacionais.sudo cp /etc/fstab /etc/fstab.bak.$(date +%Y%m%d) -
Adicione a configuração do swap ao arquivo
fstab.O comando abaixo verifica se já existe uma entrada de swap antes de adicionar uma nova, evitando duplicatas.
SWAP_FILE_PATH="/swapfile" if ! grep -q "swap" /etc/fstab; then echo "${SWAP_FILE_PATH} none swap sw 0 0" | sudo tee -a /etc/fstab else echo "Swap entry already exists in /etc/fstab. No changes made." fi -
Verifique a configuração persistente.
É possível validar se a configuração do
/etc/fstabestá correta sem reiniciar a instância.# 1. Disable all swap. sudo swapoff -a # 2. Remount all swap partitions based on the /etc/fstab file. sudo swapon -a # 3. Check if swap has been remounted as expected. swapon --showSe o comando exibir corretamente as informações de swap, a configuração persistente foi bem-sucedida.
Ajustar o swappiness
O swappiness é um parâmetro do kernel Linux que controla a agressividade com que o sistema utiliza o swap. Seu valor varia de 0 a 100.
Valor mais alto: O kernel usa o swap de forma mais agressiva, movendo páginas de memória inativas para o disco mais rapidamente.
Valor mais baixo: O kernel evita o uso de swap, preferindo manter as páginas na memória física e recorrendo ao swap apenas quando a memória física estiver criticamente baixa.
O ajuste de parâmetros de swap exige cautela. Alterações inadequadas podem degradar o desempenho do sistema ou causar comportamentos inesperados na memória virtual. Faça alterações somente quando sua carga de trabalho específica exigir e você compreender totalmente a função do parâmetro. Em caso de dúvida, mantenha a configuração padrão.
Recomendações baseadas em cenários:
|
Cenário de aplicação |
Valor de swappiness recomendado |
Justificativa |
|
Bancos de dados (MySQL, PostgreSQL) |
1–10 |
Para garantir o desempenho das consultas, evita-se mover os pools de buffer principais para o swap. |
|
Bancos de dados em memória (Redis, Memcached) |
1 |
Bancos de dados em memória são extremamente sensíveis à latência. Qualquer atividade de swap pode degradar severamente o desempenho. O valor 1 significa que o swap é usado apenas quando absolutamente necessário. |
|
Servidores de aplicações web (Nginx, Apache) |
10–60 |
Equilibra velocidade de resposta e utilização de memória, permitindo que páginas de processos inativos e não essenciais sejam movidas para o swap. |
|
Cargas de trabalho padrão/gerais/em lote |
60 (padrão do sistema) |
Adequado para a maioria dos cenários de uso geral. Permite que o sistema mova processos inativos para o swap, liberando memória física para tarefas ativas. |
Procedimento:
-
Edite o arquivo
/etc/sysctl.conf. Por exemplo, para usar a partição swap apenas quando a memória física estiver abaixo de 10%, ajuste o seguinte parâmetro.vm.swappiness=10 -
Salve o arquivo e saia. Em seguida, execute o comando abaixo para aplicar a configuração.
sudo sysctl -p -
Verifique se a configuração do parâmetro
swappinessentrou em vigor.cat /proc/sys/vm/swappinessA saída abaixo indica que a configuração do parâmetro
swappinessfoi aplicada corretamente.
Monitorar o uso de swap
|
Objetivo do monitoramento |
Comando recomendado |
Descrição |
|
|
Visualize o uso geral de memória e swap |
|
Comando mais comum e direto. |
|
|
Monitorar atividade de swap em tempo real (swap-in/swap-out) |
|
Observe as colunas |
|
|
Identificar processos que estão usando swap |
|
sort -k2 -hr` |
Este comando itera sobre todos os processos, lista o nome e o uso de swap de cada um, e ordena os resultados para mostrar primeiro os processos com maior consumo de swap. |
|
Analisar desempenho histórico |
|
O |
Desativar e limpar o swap
Quando um arquivo de swap não for mais necessário, desative-o com segurança e exclua o arquivo para liberar espaço em disco.
-
Desative o arquivo de swap especificado.
sudo swapoff /swapfile -
Remova a configuração de montagem automática do
fstab. Utilize o comandosedpara remover a linha correspondente com segurança e evitar erros de edição manual.sudo sed -i '\|/swapfile|d' /etc/fstab -
Exclua o arquivo de swap para liberar espaço em disco.
sudo rm /swapfile -
Verifique se o swap foi completamente desativado.
Execute
swapon --showoufree -hpara confirmar que as informações de swap desapareceram.
Perguntas frequentes
Por que o swap não funciona como esperado?
Após criar uma partição swap e ajustar o parâmetro swappiness, você pode notar um fenômeno confuso: mesmo quando a memória física está sob alta pressão, o uso da partição swap permanece baixo, dando a impressão de que a configuração do swappiness não teve efeito.
Diagnóstico do problema
A causa raiz desse problema reside nos mecanismos do systemd e de grupos de controle (Cgroup), amplamente utilizados nas distribuições Linux modernas.
Regras específicas de Cgroup: No modo padrão Cgroup v1, o
systemdcria Cgroups separados para componentes como serviços do sistema (system.slice) e sessões de usuário (user.slice). Cada Cgroup pode ter seus próprios parâmetros de controle de recursos, como omemory.swappiness.Configurações locais substituem as globais: Quando o
systemdinicializa esses Cgroups, ele define um valor padrão dememory.swappinesspara eles (geralmente 60). Essa configuração específica do Cgroup tem precedência sobre ovm.swappinessglobal configurado no/etc/sysctl.conf.Resultado: O programa em execução segue a regra de
swappinessdo seu Cgroup em vez da regra global, tornando a configuração global ineficaz.
Verificação rápida
Encontre o PID de um processo em execução (por exemplo,
pidof nginx).-
Verifique o cgroup ao qual o processo pertence:
cat /proc/[PID]/cgroupVocê verá um caminho como
/system.slice/nginx.service. -
Verifique o valor real de
swappinessdeste Cgroup:cat /sys/fs/cgroup/memory/system.slice/nginx.service/memory.swappinessProvavelmente a saída será
60, mesmo que você tenha definido ovm.swappinessglobal com outro valor. Isso indica que a configuração global não está tendo efeito.
Soluções
Solução 1: Migrar para cgroup v2 (recomendado)
Princípio: O cgroup v2 corrige muitos problemas de design da versão v1 e utiliza uma estrutura hierárquica unificada. No modo v2, os cgroups filhos herdam a configuração do nó pai por padrão. Basta configurar o vm.swappiness global, e essa configuração será aplicada automática e uniformemente a todos os processos do sistema.
Procedimento:
-
Atualize os parâmetros de inicialização do kernel: Use a ferramenta
grubbypara adicionar o parâmetrosystemd.unified_cgroup_hierarchy=1a todos os kernels, habilitando o cgroup v2.sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"Nota: Este comando é persistente. Ele modifica a configuração de boot do GRUB, fazendo com que o sistema inicialize no modo cgroup v2 na próxima reinicialização.
-
Reinicie a instância ECS: Esta configuração é um parâmetro de nível de kernel e requer reinicialização para entrar em vigor.
sudo reboot -
Verifique e configure:
Verificação: Após a reinicialização, execute
mount | grep cgroup. Se você vir um ponto de montagem do tipocgroup2, a migração para cgroup v2 foi bem-sucedida.Configuração: Defina o valor desejado de
vm.swappinessno/etc/sysctl.confe executesudo sysctl -ppara aplicar a configuração a todo o sistema.
Solução 2: Configurar persistência no cgroup v1 (alternativa)
Se o seu ambiente não puder ser migrado por motivos específicos (por exemplo, executa softwares de contêiner mais antigos incompatíveis com cgroup v2), utilize uma configuração drop-in do systemd para resolver o problema.
Princípio: Este método não depende mais de configurações globais potencialmente falhas. Em vez disso, instrui diretamente o systemd a usar o valor de swappiness especificado ao criar os slice principais.
Procedimento:
-
Crie uma configuração de substituição para o
system.slice(isso afeta todos os serviços do sistema):Substitua
60pelo valor deswappinessdesejado.sudo mkdir -p /etc/systemd/system/system.slice.d/ sudo tee /etc/systemd/system/system.slice.d/99-swappiness.conf <<'EOF' [Slice] MemorySwappiness=60 EOF -
Crie uma configuração de substituição para o
user.slice(isso afeta todas as sessões de login de usuário).Substitua
60pelo valor deswappinessdesejado.sudo mkdir -p /etc/systemd/system/user.slice.d/ sudo tee /etc/systemd/system/user.slice.d/99-swappiness.conf <<'EOF' [Slice] MemorySwappiness=60 EOF -
Aplique a configuração.
sudo systemctl daemon-reload sudo rebootO comando
daemon-reloadapenas recarrega a configuração dosystemd. Para garantir que todos os serviços e sessões sejam criados sob a nova configuração de Slice, é obrigatório reiniciar o servidor.