

# Gerenciar o espaço de memória de troca de contêiner no Amazon ECS
<a name="container-swap"></a>

Com o Amazon ECS, você pode controlar o uso do espaço de memória de troca em suas instâncias do Amazon EC2 baseadas em Linux no nível de contêiner. Utilizando uma configuração de troca de contêiner, cada contêiner de uma definição de tarefa pode ter a troca habilitada ou desabilitada. Para aqueles com troca habilitada, a quantidade máxima de espaço de troca utilizada pode ser limitada. Por exemplo, contêineres críticos para latência podem ter a troca desabilitada. Por outro lado, contêineres com altas demandas de memória transitória podem ter a troca habilitada para reduzir as chances de erros de falta de memória quando o contêiner está sob carga.

A configuração de troca para um contêiner é gerenciada pelos seguintes parâmetros de definição de contêiner.

`maxSwap`  
A quantidade total de memória de troca (em MiB) que um contêiner pode usar. Esse parâmetro será convertido na opção `--memory-swap` para execução do docker em que o valor é a soma da memória do contêiner mais o valor de `maxSwap`.  
Se um valor `maxSwap` de `0` for especificado, o contêiner não usará a troca. Os valores aceitos são `0` ou qualquer número inteiro positivo. Se o parâmetro `maxSwap` for omitido, o contêiner usará a configuração de troca para a instância de contêiner na qual ele está sendo executado. Um valor `maxSwap` deve ser definido para que o parâmetro `swappiness` seja usado.

`swappiness`  
É possível usar isso para ajustar o comportamento de troca de memória de um contêiner. Um valor `swappiness` igual a `0` faz com que a troca não ocorra, a menos que ela seja necessária. Um valor `swappiness` de `100` fará com que as páginas sejam trocadas de forma agressiva. Os valores aceitos são números inteiros entre `0` e `100`. Se o parâmetro `swappiness` não for especificado, será usado um valor padrão de `60`. Se nenhum valor for especificado para `maxSwap`, esse parâmetro será ignorado. Esse parâmetro é mapeado para a opção `--memory-swappiness` de execução do docker.

No exemplo abaixo, é fornecida a sintaxe JSON.

```
"containerDefinitions": [{
        ...
        "linuxParameters": {
            "maxSwap": integer,
            "swappiness": integer
        },
        ...
}]
```

## Considerações
<a name="container-swap-considerations"></a>

Considere o seguinte ao usar uma configuração de troca de contêiner.
+ O espaço de troca deve ser habilitado e alocado na instância do Amazon EC2 que hospeda suas tarefas para os contêineres usarem. As AMIs otimizadas para o Amazon ECS não têm a troca habilitada por padrão. É necessário habilitar a troca na instância para usar esse atributo. Para obter mais informações, consulte [Volumes de troca de armazenamento de instâncias](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-store-swap-volumes.html) no *Manual do usuário do Amazon EC2* ou [Como alocar memória para atuar como espaço de troca em uma instância do Amazon EC2?](https://repost.aws/knowledge-center/ec2-memory-swap-file).
+ Os parâmetros de definição de contêiner do espaço de troca são compatíveis apenas com definições de tarefa que especificam o EC2. Esses parâmetros não são compatíveis com definições de tarefa destinadas somente ao uso do Amazon ECS no Fargate.
+ Esse recurso é compatível somente com contêineres do Linux. No momento, não há compatibilidade com contêineres do Windows.
+ Se os parâmetros `maxSwap` e `swappiness` de definição de contêiner forem omitidos de uma definição de tarefa, cada contêiner terá um valor `swappiness` padrão de `60`. Além disso, o limite de uso total de trocas é de duas vezes a memória do contêiner.
+ Se você estiver usando tarefas no Amazon Linux 2023, não haverá suporte para o parâmetro `swappiness`.