Perché le immagini di Ubuntu EC2 non sono scambiate?


82

Ho avviato un paio di server su EC2 e non hanno swap.

Sto sbagliando o è che le macchine non ne hanno?


Mi chiedevo anche quello, ma ho appena impostato un'istanza EBS, formattata come swap e swapon / dev / sdg ...
Tom O'Connor

È anche tipico, il caso dell'utilizzo di unità SSD su un sistema Linux per non configurare lo scambio sull'unità SSD. Soprattutto perché alcune persone sono paranoiche avrebbe un impatto negativo sulla durata di conservazione di un SSD perforando sempre lo stesso insieme di settori.
Djangofan,

1
Quale AMI e quale dimensione dell'istanza EC2. L'AMI deve essere configurato per utilizzare una partizione di swap e l'istanza deve averla aggiunta all'avvio.
Jeremy Bouse,

Se possibile, consiglierei di non usare lo swap su EC2 a meno che tu non sia sicuro al 99% di non doverlo usare (IE è solo lì per le emergenze). Quando abbiamo disabilitato lo swap su alcune delle nostre istanze EC2, i nostri costi mensili di EBS IO sono probabilmente dimezzati. Solo i miei due centesimi per risparmiarti due centesimi - sì, è stato terribile, mi scuso e andrò a nascondermi in un angolo;)
Sfumare il

Puoi anche consultare questi passaggi docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
Artem.Borysov,

Risposte:


74

Hai ragione, le immagini di Ubuntu EC2 EBS non hanno lo spazio di swap configurato ( almeno per 11.04 ). Le immagini "normali" di tipo istanza hanno una partizione di swap, sebbene solo 896 MB su quella che ho testato.

Se un processo si interrompe e non si dispone di spazio di scambio, il server potrebbe arrestarsi per un po 'prima che il killer OOM entri in azione, mentre con lo scambio diventa semplicemente lento. Per questo motivo, mi piace sempre avere uno spazio di scambio in giro, anche con abbastanza RAM. Ecco le tue opzioni:

  • Crea un volume EBS (2-4 volte la dimensione della tua RAM), collegalo alla tua istanza (mi piace chiamarlo / dev / xvdm per "memoria") sudo mkswap /dev/xvdm, aggiungilo a fstab sudo swapon -ae sei pronto per partire . L'ho già fatto e funziona bene, ma è probabilmente un po 'più lento dell'archivio di istanze perché passa attraverso la rete.

  • Oppure potresti essere in grado di ripartizionare il disco per aggiungere una partizione di swap, anche se questo potrebbe richiedere la creazione di una nuova AMI. Non sono stato in grado di farlo in un'istanza in esecuzione, perché non riesco a smontare il file system di root e non ho nemmeno accesso al dispositivo disco (/ dev / xvda), solo alla partizione (xvda1).

  • Oppure puoi creare un file di scambio. Questa è la mia soluzione preferita in questo momento.

    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
    

    Fatto. :) So che molte persone si sentono male per l'utilizzo di file anziché di partizioni, ma sicuramente funziona abbastanza bene come spazio di scambio di emergenza.


4
Lo scambio con un volume EBS può comportare costi aggiuntivi, come indicato dalle altre risposte. Non utilizzare lo scambio o lo scambio in un negozio di istanze sembra una soluzione migliore.
Isuldor

7
L'uso dell'istanza store è un'opzione migliore di EBS. EBS è un file system di rete, quindi si collega all'istanza EC2 sulla stessa connessione di rete di tutto il resto. L'istanza store è collegata all'hardware che ospita l'istanza (ecco perché non persiste quando si interrompe e si avvia l'istanza). L'unica volta che EBS è un'opzione per lo scambio è quando si utilizza un tipo di istanza che non viene fornito con l'archiviazione dell'istanza, vale a dire, t1.micro (che dato che ha solo circa 620 MB di RAM è probabilmente quello che ha davvero bisogno di emergenza scambiare).
ColtonCat,

Il bs = 1M è già in notazione binaria, quindi il moltiplicatore count = 2048 dovrebbe essere count = 2000 - se non sbaglio.
ypocat,

1
Se stai andando per 2GiB, allora 1024 * 2048 sembra corretto.
Jo Liss,

25

La posizione migliore per lo scambio IMHO è l'istanza-archivio. Perché? AWS non ti addebita alcun costo per i / o sul negozio di istanze. Inoltre, l'istanza-store è più performante di EBS in molti casi. Assicurati di avere uno script che ricrea il file di scambio nel caso in cui interrompi l'istanza. I riavvii vanno bene. Perché oh perché non è lì per impostazione predefinita?

Individuiamo l'istanza-store.

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

Evviva, 160,1 GB gratis! Inserisci lo swap lì dentro e dimentica i $ 100 in eccesso per server quando lo swap basato su EBS viene sciamato per errore. Esperienza spiacevole parlare qui.

Apparentemente in alcuni casi non vedi l'istanza-store.

A seconda del tipo di istanza, è innanzitutto necessario collegare i volumi del negozio di istanze all'istanza utilizzando le opzioni di mappatura del dispositivo a blocchi. Se non lo fai, potresti non vedere nemmeno i dispositivi in ​​/ dev (come in Come utilizzare i volumi di archiviazione dei volumi di istanza in Amazon EC2? )


1
voglio solo sottolineare che gli utenti t1.micro di livello gratuito non possono utilizzare questa opzione.
Reuben L.,

20

Nota : Amazon ha modificato la propria politica dei prezzi e non applica alcun addebito per le richieste di I / O a partire dalla metà del 2016. La risposta è conservata qui per motivi storici, ma non ci sono implicazioni in termini di costi derivanti dall'uso (o non utilizzo) dello scambio su istanze supportate da EBS in EC2.


Questo è di progettazione. Lo scambio è disattivato per impostazione predefinita nelle istanze supportate da E2 su EC2, per evitare costi imprevedibili.

Se hai un'app affamata di memoria che va male (diciamo, su un'istanza piccola o piccola), può generare una quantità abbastanza grande di richieste I / O sul tuo volume EBS. Amazon addebita $ 0,10 per 1 milione di richieste I / O (vedi http://aws.amazon.com/pricing/ebs/ ) .

In condizioni normali non dovresti preoccupartene; di solito il costo delle richieste I / O anche su istanze più piccole di qualche dollaro, se è così. Quindi, se sai di avere un'istanza di dimensioni adeguate e che lo swap verrà utilizzato solo raramente, vai avanti e abilitalo. Ma fai attenzione con esempi minuscoli.

Se si abilita lo scambio, è possibile tenere d'occhio i rapporti sull'utilizzo. Facoltativamente, puoi anche impostare un avviso di fatturazione andando sul pannello di controllo di CloudWatch e creando un nuovo allarme per l'importo totale fatturato. In questo modo sarai avvisato immediatamente è qualcosa di strano nelle tue istanze.


Questa risposta è un po 'fuorviante o confusa per me poiché i tipi di istanza più comuni usano volumi SSD. aws.amazon.com/ec2/instance-types
Taylor Edmiston

2
@tedmiston: in effetti, questa risposta non è più applicabile. Mi sono adattato per riflettere la nuova realtà, ma fondamentalmente non ci sono costi per le richieste di I / O, quindi abilitare lo swap (o meno) ora può essere fatto su una base tecnica pura.
Gui Ambros,

1

Controlla il /etc/fstabfile, probabilmente sono stati configurati senza scambiare l'immagine che stai utilizzando. Penso che alcune persone corrano senza scambiare i server poiché si aspettano di non usare mai più della memoria totale - lo scambio rende tutto molto lento.

Tuttavia, sono sempre paranoico su alcuni processi che si accumulano in memoria, quindi penso che sarebbe prudente da parte tua semplicemente impostare un'unità di swap e ricreare un'immagine dall'istanza ec2 in esecuzione.


2
Lo scambio occasionale non rallenta il sistema.
laebshade,

0

Una soluzione semplice per l'esecuzione swapin EC2immagini consiste nell'esecuzione swapcompressa con lz4in ramcon zram-init.

Questa soluzione non non prendere ramlontano dal host:

inserisci qui la descrizione dell'immagine


1
Molto creativo, ma usare la RAM come RAM effettiva non avrebbe più senso che usarla come file system in memoria per lo scambio? (che viene utilizzato principalmente quando si esaurisce la memoria) Ridurre la quantità di memoria disponibile per le applicazioni per creare lo scambio sembra controintuitivo ...
HBruijn

Risposta interessante, ma penso che l'utilizzo di EBS / store di istanze sia probabilmente una migliore soluzione per scopi generali. Ho un t2.nano con 512 MB di RAM e 512 MB di swap su EBS che funziona bene.
Tim

Questo chiaramente richiede RAM dall'host (istanza EC2) - da dove altro proviene la RAM? L'unico vantaggio di questo approccio è comprimere parte della RAM totale, ma non offre la possibilità di utilizzare SSD come swap. È possibile invece utilizzare quello zswapche fornisce cache RAM compressa su un normale file / disco di scambio: wiki.archlinux.org/index.php/zswap . Vedi cnx-software.com/2018/05/14/… per ulteriori informazioni su zram.
RichVel
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.