¿Cómo se agrega el intercambio a una instancia EC2?

293

Actualmente estoy ejecutando una micro instancia ec2 y he descubierto que la instancia ocasionalmente se queda sin memoria.

Además de usar un tamaño de instancia más grande, ¿qué más se puede hacer?

ajtrichards
fuente

Respuestas:

574

Una solución para este problema es agregar swap(es decir, paging) espacio a la instancia.

La paginación funciona creando un área en su disco duro y usándola para memoria adicional, esta memoria es mucho más lenta que la memoria normal, sin embargo, hay mucho más disponible.

Para agregar este espacio adicional a su instancia, escriba:

sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
sudo /sbin/mkswap /var/swap.1
sudo chmod 600 /var/swap.1
sudo /sbin/swapon /var/swap.1

Si necesita más de 1024, cámbielo a algo más alto.

Para habilitarlo de manera predeterminada después de reiniciar, agregue esta línea a / etc / fstab:

/var/swap.1   swap    swap    defaults        0   0
ajtrichards
fuente
¿Podría explicar qué significa "if = ...", "of = ...", bs = 1M y count = 1024 porque nunca he visto if, of y = en la lista de argumentos.
ア レ ッ ク ス
31
ifsignifica 'archivo de entrada', ofsignifica 'archivo de salida', bssignifica 'tamaño de bloque' y countes el número de bloques que desea asignar ... puede leer la manpágina del comando para obtener más información: linux.die.net/man/1/ dd
Fábio Batista
44
Esa línea de comando dd significa "copiar de / dev / zero a /var/swap.1. Hágalo leyendo 1024 bloques de tamaño 1 megabyte". Es una forma rápida de crear un archivo de 1GB lleno de ceros.
Nelson
3
Suficientemente viejo, pero mi memoria de intercambio permanece 0% utilizada incluso después de reiniciar, ¿alguna ayuda?
Girdhari Agrawal
3
Si desea verificar si el intercambio está activo:$> free -m
herve
216

El intercambio debe realizarse en el disco de Almacenamiento de instancias (efímero) y no en un dispositivo EBS. El intercambio causará una gran cantidad de IO y aumentará el costo en EBS. EBS también es más lento que el Almacén de instancias y el Almacén de instancias es gratuito con ciertos tipos de instancias EC2 .

Por lo general, se montará en / mnt, pero si no se ejecuta

sudo mount /dev/xvda2 /mnt

Para crear un archivo de intercambio en este dispositivo, haga lo siguiente para un archivo de intercambio de 4 GB

sudo dd if=/dev/zero of=/mnt/swapfile bs=1M count=4096

Asegúrese de que ningún otro usuario pueda ver el archivo de intercambio

sudo chown root:root /mnt/swapfile
sudo chmod 600 /mnt/swapfile

Hacer y marcar como intercambio

sudo mkswap /mnt/swapfile
sudo swapon /mnt/swapfile

Agregue / Asegúrese de que lo siguiente esté en su / etc / fstab

/dev/xvda2      /mnt    auto    defaults,nobootwait,comment=cloudconfig 0   2
/mnt/swapfile swap swap defaults 0 0

por último habilitar el intercambio

sudo swapon -a
David
fuente
66
esta es definitivamente la respuesta más completa de la OMI
Jon B
44
Para montar un sistema de archivos, se debe especificar el tipo de sistema de archivos. Para encontrar el sistema de archivos, el comando es: $ df -T Esto le mostrará los dispositivos y sus sistemas de archivos. Principalmente ext4. Para mí fue / dev / xvda1, no 2.
user1452686
8
Según docs.aws.amazon.com/AWSEC2/latest/UserGuide/… ya no es posible agregar almacenes de instancias a las instancias t1 / t2. Después de intentarlo, parece ser correcto.
muttonUp
3
@alfetopito Probablemente pueda crear un archivo de intercambio literal en una partición existente en lugar de agregar otra partición como intercambio. Una buena guía para Centos 6 - digitalocean.com/community/tutorials/…
muttonUp
1
Según Amazon, no está garantizado que conserve el almacenamiento de su instancia después del reinicio, ¿no fallará fstab entonces?
dualed
42

Después de aplicar los pasos mencionados por ajtrichards, puede verificar si su instancia de nivel gratuito de Amazon está utilizando swap con este comando

cat /proc/meminfo

resultado:

ubuntu@ip-172-31-24-245:/$ cat /proc/meminfo
MemTotal:         604340 kB
MemFree:            8524 kB
Buffers:            3380 kB
Cached:           398316 kB
SwapCached:            0 kB
Active:           165476 kB
Inactive:         384556 kB
Active(anon):     141344 kB
Inactive(anon):     7248 kB
Active(file):      24132 kB
Inactive(file):   377308 kB
Unevictable:           0 kB
Mlocked:               0 kB

Total de intercambio: 1048572 kB

Sin intercambio: 1048572 kB

Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        148368 kB
Mapped:            14304 kB
Shmem:               256 kB
Slab:              26392 kB
SReclaimable:      18648 kB
SUnreclaim:         7744 kB
KernelStack:         736 kB
PageTables:         5060 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1350740 kB
Committed_AS:     623908 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7420 kB
VmallocChunk:   34359728748 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      637952 kB
DirectMap2M:           0 kB
HimalayaCoder
fuente
40

Puede agregar un intercambio de 1 GB a su instancia con estos comandos:

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
sudo mkswap /swapfile
sudo swapon /swapfile

Para habilitarlo de manera predeterminada después de reiniciar, agregue esta línea a /etc/fstab:

/swapfile swap swap defaults 0 0
David Levesque
fuente
¿Pero desde cuál de mi sistema de archivos se necesitará espacio para crear Swap?
Hussain
@Hussain Creará el intercambio en el sistema de archivos raíz ya que la ruta es /swapfile. Pero también podría montar otro sistema de archivos y crear el archivo de intercambio allí, por ejemplo /mnt/blah/swapfile.
David Levesque
Puede confirmar que esto funciona en una instancia de t2.micro. Hice el mío @ / mnt / swap, ya que me gusta una raíz limpia.
Mike Purcell
1
Votó esta respuesta porque es la más corta y hace el trabajo. Sin embargo, se debe agregar el comando swapfile chmod 600.
Sábado
15

Si se encuentra en t2los casos ( t2.micro, t2.medium, t2.small), no hay efímera o instancia de almacenamiento disponible para usted. Por lo tanto, debe crear su intercambio en el EBSque, dependiendo de su caso de uso, puede o no ser una buena idea. De lo contrario, siga la respuesta de @David y cree su intercambio en el almacenamiento efímero para evitar pagar los costos de EBS.

Más información: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html hay una tabla que muestra cuánto almacenamiento efímero obtienes para cada tipo de instancia.

Ali
fuente
1
Puede confirmar que esto es generalmente una mala idea. Si tiene un proceso que se vuelve deshonesto (he hecho que un servidor de nodo lo haga, y una configuración de python / apio), incurrirá en una tonelada de cargos cuando lea y escriba en su bloque EBS durante toda la semana sin que usted sepa: -)
ZachM
3
De acuerdo con aws.amazon.com/ebs/pricing , IO está incluido en todos los volúmenes de EBS, excepto SSOS IPOS aprovisionados (io1). Solo por GB. Esto podría haber sido un cambio reciente en el modelo de precios, pero significa que a pesar de que EBS es mucho más lento que el verdadero almacenamiento de instancias, no hay cargos adicionales por lecturas y escrituras.
bobsoap
@bobsoap ¿Te importaría aclarar eso? Revisé tu enlace y encontré esto For example, if you provision a volume with 1000 IOPS, and keep this volume for 15 days in a 30 day month, then in a Region that charges $0.10 per provisioned IOPS-month, you would be charged $50 for the IOPS that you provision ($0.10 per provisioned IOPS-month * 1000 IOPS provisioned * 15 days/30). You will be charged for the IOPS provisioned on a volume even when the volume is detached from an instance.. Parece que AWS cobrará por las operaciones de lectura y escritura.
Valter Silva
2
@ValterHenrique El texto que citó se aplica solo a los volúmenes con IOPS aprovisionados, pero puede elegir entre varios tipos de volúmenes diferentes. Si está utilizando un volumen "normal" sin IOPS aprovisionados (como el tipo de volumen SSD de propósito general llamado "gp2"), las operaciones de lectura y escritura no se cobran extra. Quizás un mejor enlace para comparar: aws.amazon.com/ebs/details
bobsoap
8

Puede crear espacio de intercambio utilizando los siguientes pasos Aquí estamos creando intercambio en /home/

  1. dd if=/dev/zero of=/home/swapfile1 bs=1024 count=8388608
    Aquí el recuento es el recuento de kilobytes del espacio de intercambio

  2. mkswap /home/swapfile1

  3. vi /etc/fstab
    hacer entrada:
    /home/swapfile1 swap swap defaults 0 0

  4. correr:
    swapon -a

minhas23
fuente
4

Podemos agregar espacio de intercambio en cualquier servidor

crear un archivo usando el comando dd

 #dd if=/dev/zero of=/swapfile bs=1M count=2048
                    or
 #dd if=/dev/zero of=/swapfile bs=1024M count=2

bs es blockize y count se refiere al tamaño en MB o GB

podemos usar viceversa

Después de la creación, cambie el permiso del archivo:

 #chmod 600 /swapfile 

Luego hace el intercambio del archivo:

 #mkswap /swapfile 

Luego habilite el archivo de intercambio con el comando swapon:

 #swapon  /swapfile 

Compruebe con comando libre si el intercambio está habilitado o no:

 #free -h
 #swapon -s
Javeed Shakeel
fuente
3

El uso de la respuesta de almacenamiento de instancias de David inicialmente funcionó para mí (en un m5d.2xlarge), sin embargo, después de detener la instancia de EC2 y volver a encenderla, no pude volver a ingresar a la instancia.

Los registros de la instancia informaron: "Está en modo de emergencia. Después de iniciar sesión, escriba" journalctl -xb "para ver los registros del sistema," reinicio de systemctl "para reiniciar," predeterminado de systemctl "o" salir "para iniciar en modo predeterminado. Presione Entrar para mantenimiento"

En cambio, seguí las instrucciones de AWS en este enlace y todo funcionó perfectamente, incluso después de apagar y volver a encender la instancia.

https://aws.amazon.com/premiumsupport/knowledge-center/ec2-memory-swap-file/

sudo dd if=/dev/zero of=/swapfile bs=1G count=4

sudo chmod 600 /swapfile

sudo mkswap /swapfile

sudo swapon /swapfile

sudo swapon -s

sudo vi /etc/fstab
/swapfile swap swap defaults 0 0
DaveJay
fuente
1

Prueba swapspace http://pqxx.org/development/swapspace/

La mayoría de las distribuciones lo tienen empaquetado.

En EC2 es posible que desee cambiar "swappath" a / mnt o disco de alta iops.

rdoroshenko
fuente
1
De los documentos: "En su forma actual, Swapspace probablemente no sea una buena opción para los sistemas que necesitan permanecer receptivos en todo momento".
Dave Albert
-3

Puede usar el siguiente script para agregar intercambio en Amazon Linux.

https://github.com/chetankapoor/swap

Descargue el script usando wget:

wget https://raw.githubusercontent.com/chetankapoor/swap/master/swap.sh -O swap.sh

Luego ejecute el script con el siguiente formato:

sh swap.sh 2G

Para un tutorial completo puede visitar:

https://installvirtual.com/shell-script-to-create-swap/

Chetan kapoor
fuente
No veo qué aporta esta respuesta, además de ser un shellscript que básicamente hace lo que la respuesta aceptada ya explicó.
Nils Werner
Acabo de crear un script de shell que ahorra tiempo, por lo que habrá 2 pasos para crear el intercambio en lugar de ejecutar 5 comandos y, si el intercambio ya existe, le mostrará que el intercambio ya está allí.
Chetan kapoor
3
Exactamente. Un shellscript que se supone que debo ejecutar como root. Hecho por alguien, en algún lugar, que podría cambiar o desaparecer sin previo aviso. Todo para guardar 4-5 líneas de comando que fueron publicadas y aceptadas hace 5 años.
Nils Werner