Por que as imagens do ubuntu EC2 não são trocadas?


82

Comecei alguns servidores no EC2 e eles não têm troca.

Estou fazendo algo errado ou é que as máquinas simplesmente não têm?


Eu me perguntei isso também, mas eu só configurar uma instância EBS, formatado como swap, e swapon / dev / sdg ...
Tom O'Connor

Também é típico, o caso de usar unidades SSD em um sistema Linux para não configurar a troca na unidade SSD. Principalmente porque algumas pessoas são paranóicas, isso teria um impacto negativo na vida útil de um SSD, perfurando o mesmo conjunto de setores o tempo todo.
precisa saber é o seguinte

1
Qual AMI e qual tamanho de instância do EC2. A AMI precisa ser configurada para usar uma partição de troca e a instância precisa ser adicionada quando iniciada.
precisa saber é o seguinte

Se possível, aconselho a não usar swap no EC2, a menos que você tenha 99% de certeza de que não precisará usá-lo (o IE está disponível apenas para emergências). Quando desativamos a troca em algumas de nossas instâncias do EC2, nossos custos mensais de E / S do EBS provavelmente caíram pela metade. Apenas meus dois centavos para salvar-lhe dois centavos - sim que era terrível, peço desculpas e vai esconder em um canto;)
Smudge

Você também pode procurar nestas etapas docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
Artem.Borysov

Respostas:


74

Você está certo, as imagens do Ubuntu EC2 EBS não vêm com espaço de troca configurado ( pelo menos para 11.04 ). As imagens "regulares" do tipo de instância têm uma partição de troca, embora apenas 896 MB na que eu testei.

Se algum processo explodir e você não tiver espaço para troca, o servidor poderá parar por um bom tempo antes que o assassino do OOM entre em ação, enquanto que com a troca, apenas fica lento. Por esse motivo, eu sempre gosto de ter espaço de troca, mesmo com RAM suficiente. Aqui estão as suas opções:

  • Crie um volume EBS (2-4 vezes o tamanho da sua RAM), anexe-o à sua instância (eu gosto de chamá-lo de / dev / xvdm para "memória") sudo mkswap /dev/xvdm, adicione-o ao fstab sudo swapon -ae você estará pronto . Já fiz isso antes e funciona bem, mas provavelmente é um pouco mais lento que o armazenamento de instância, porque passa pela rede.

  • Ou você pode reparticionar seu disco para adicionar uma partição de troca, embora isso possa exigir a criação de uma nova AMI. Não consegui fazer isso em uma instância em execução, porque não consigo desmontar o sistema de arquivos raiz e nem tenho acesso ao dispositivo de disco (/ dev / xvda), apenas à partição (xvda1).

  • Ou você pode criar um arquivo de troca. Esta é a minha solução preferida agora.

    sudo dd if=/dev/zero of=/var/swapfile bs=1M count=2048 &&
    sudo chmod 600 /var/swapfile &&
    sudo mkswap /var/swapfile &&
    echo /var/swapfile none swap defaults 0 0 | sudo tee -a /etc/fstab &&
    sudo swapon -a
    

    Feito. :) Eu sei que muitas pessoas se sentem mal por usar arquivos em vez de partições, mas certamente funciona bem como espaço de troca de emergência.


4
A troca para um volume EBS pode resultar em custos adicionais, conforme indicado pelas outras respostas. Não usar swap ou trocar para um armazenamento de instância parece ser uma solução melhor.
Isuldor

7
Usar o armazenamento da instância é uma opção melhor que o EBS. O EBS é um sistema de arquivos de rede, portanto, se conecta à instância do EC2 pela mesma conexão de rede que tudo o resto. O armazenamento da instância está anexado ao hardware que está hospedando a instância (é por isso que não persiste quando você para e inicia sua instância). O único momento em que o EBS é uma opção de troca é quando você está usando um tipo de instância que não vem com armazenamento de instância, por exemplo, o t1.micro (que, por possuir apenas cerca de 620 MB de RAM, provavelmente é o que realmente precisa de emergência). troca).
precisa saber é o seguinte

O bs = 1M já está em notação binária, então o multiplicador count = 2048 deve ser count = 2000 - se não estiver errado.
precisa saber é

1
Se você optar por 2GiB, 1024 * 2048 parece correto.
precisa saber é

25

A melhor localização para trocar IMHO é a loja da instância. Por quê? A AWS não cobra por E / S na loja da instância. Além disso, o repositório de instâncias é mais eficiente que o EBS em muitos casos. Apenas certifique-se de ter um script que recrie o arquivo de permuta caso pare a instância. Reinicializações são boas. Por que oh por que não está lá por padrão?

Vamos localizar a loja da instância.

root@domU-**-**-**-**-**-**:/var/log# fdisk -l

[...]

Disk /dev/xvda2: 160.1 GB, 160104972288 bytes
255 heads, 63 sectors/track, 19464 cylinders, total 312705024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda2 doesn't contain a valid partition table

Hurrah, 160,1GB de graça! Coloque seu swap lá e esqueça as excedentes de 100 $ por servidor quando o seu swap baseado no EBS for invadido por engano. Infeliz experiência falando aqui.

Aparentemente, em alguns casos, você não vê o repositório de instâncias.

Dependendo do tipo de instância, primeiro você precisa anexar os volumes de armazenamento da instância à instância usando as opções de mapeamento de dispositivo de bloco. Se você não fizer isso, talvez nem veja os dispositivos em / dev (conforme Como usar o armazenamento "Instance Volumes de armazenamento" no Amazon EC2? )


1
só quero ressaltar que os usuários do t1.micro no nível gratuito não podem usar esta opção.
Reuben L.

20

Nota : a Amazon mudou sua política de preços e não cobra solicitações de E / S em meados de 2016. A resposta é mantida aqui por razões históricas, mas não há implicações de custo do uso (ou não do uso) de troca nas instâncias apoiadas pelo EC2 EBS.


Isso ocorre por design. A troca é desativada por padrão nas instâncias suportadas pelo EC2 EBS, para evitar custos imprevisíveis.

Se você tiver um aplicativo que consome muita memória que não funciona (por exemplo, em uma instância pequena ou pequena), ele pode gerar uma grande quantidade de solicitações de E / S no seu volume EBS. A Amazon cobra US $ 0,10 por 1 milhão de solicitações de E / S (consulte http://aws.amazon.com/pricing/ebs/ ) .

Sob condições normais, você não deve se preocupar com isso; geralmente o custo das solicitações de E / S, mesmo em instâncias menores, alguns dólares, se houver. Portanto, se você sabe que possui uma instância de tamanho adequado e essa troca será usada apenas com pouca frequência, vá em frente e ative-a. Mas tenha cuidado com pequenas instâncias.

Se você ativar a troca, poderá ficar de olho nos Relatórios de uso. Opcionalmente, você também pode configurar um alerta de cobrança acessando o Painel de controle do CloudWatch e criando um novo alarme para o valor total faturado. Dessa forma, você será notificado imediatamente, algo estranho está acontecendo com suas instâncias.


Essa resposta é um pouco enganadora ou confusa para mim, pois os tipos de instância mais comuns usam volumes SSD. aws.amazon.com/ec2/instance-types
Taylor Edmiston

2
@tedmiston: na verdade, esta resposta não é mais aplicável. Eu me ajustei para refletir a nova realidade, mas basicamente não há cobrança para solicitações de E / S; portanto, a troca (ou não) agora pode ser feita com base puramente técnica.
Gui Ambros

1

Verifique o /etc/fstabarquivo, eles provavelmente foram configurados sem troca na imagem que você está usando. Eu acho que algumas pessoas rodam sem troca de servidores, pois esperam nunca usar mais do que a memória total - a troca torna tudo super lento.

No entanto, estou sempre paranóico com relação a algum processo que aumenta na memória, então acho que seria prudente da sua parte simplesmente configurar uma unidade de troca e recriar uma imagem da instância ec2 em execução.


2
Trocas ocasionais não tornam o sistema lento.
laebshade

0

Uma solução simples para rodar swapem EC2imagens é rodar swapcompactado com lz4in ramwith zram-init.

Esta solução não tira ramo host:

insira a descrição da imagem aqui


1
Muito criativo, mas não usar sua RAM como RAM real faria mais sentido do que usá-la como um sistema de arquivos na memória para troca? (que basicamente é usado quando você ficar sem memória) Reduzir a quantidade de memória disponível para aplicações para criar troca parece contraditório ...
HBruijn

Resposta interessante, mas acho que usar o armazenamento de instância / EBS é provavelmente uma solução melhor para uso geral. Eu tenho um t2.nano com 512 MB de RAM e 512 MB de swap no EBS que funciona bem.
Tim

Isso claramente leva a RAM do host (instância do EC2) - de onde mais vem a RAM? O único benefício dessa abordagem é compactar parte de sua RAM total, mas não fornece a capacidade de usar o SSD como swap. Você poderia usar o zswapque fornece cache de RAM compactado sobre um arquivo / disco de troca normal: wiki.archlinux.org/index.php/zswap . Consulte cnx-software.com/2018/05/14/… para obter mais informações sobre o zram.
RichVel 19/02
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.