¿Por qué las imágenes de ubuntu EC2 no tienen intercambio?

82

Comencé un par de servidores en EC2 y no tienen intercambio.

¿Estoy haciendo algo mal o es que las máquinas simplemente no tienen ninguna?

rafamvc
fuente
También me lo preguntaba, pero acabo de configurar una instancia de EBS, la formateé como intercambio y swapon / dev / sdg ...
Tom O'Connor
También es típico, el caso de usar unidades SSD en un sistema Linux para no configurar el intercambio en la unidad SSD. Principalmente porque algunas personas son paranoicas, tendría un impacto negativo en la vida de almacenamiento de un SSD al perforar el mismo conjunto de sectores todo el tiempo.
djangofan
1
Qué AMI y qué tamaño de instancia EC2. El AMI debe configurarse para usar una partición de intercambio y la instancia debe agregarse cuando se inicia.
Jeremy Bouse el
Si es posible, le aconsejo que no use el intercambio en EC2 a menos que esté 99% seguro de que no tendrá que usarlo (es decir, solo está allí para emergencias). Cuando deshabilitamos el intercambio en algunas de nuestras instancias EC2, nuestros costos mensuales de EBS IO probablemente se redujeron a la mitad. Solo mis dos centavos para ahorrarle dos centavos, sí, eso fue terrible, me disculpo y me esconderé en un rincón;)
Mancha el
También puede consultar en estos pasos docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
Artem.Borysov el

Respuestas:

74

Tienes razón, las imágenes de Ubuntu EC2 EBS no vienen con espacio de intercambio configurado ( al menos para 11.04 ). Las imágenes de tipo de instancia "regular" tienen una partición de intercambio, aunque solo 896 MB en la que probé.

Si algún proceso explota y no tiene espacio de intercambio, su servidor podría detenerse por un buen tiempo antes de que el asesino OOM entre en acción, mientras que con el intercambio, simplemente se vuelve lento. Por esa razón, siempre me gusta tener espacio de intercambio, incluso con suficiente RAM. Aquí están tus opciones:

  • Cree un volumen EBS (2-4 veces el tamaño de su RAM), conéctelo a su instancia (me gusta llamarlo / dev / xvdm para "memoria") sudo mkswap /dev/xvdm, agréguelo a fstab sudo swapon -a, y listo. . He hecho esto antes y funciona bien, pero probablemente sea un poco más lento que la tienda de instancias porque va a través de la red.

  • O quizás pueda volver a particionar su disco para agregar una partición de intercambio, aunque esto puede requerir la creación de una nueva AMI. No he podido hacer esto en una instancia en ejecución, porque no puedo desmontar el sistema de archivos raíz y ni siquiera tengo acceso al dispositivo de disco (/ dev / xvda), solo a la partición (xvda1).

  • O puede crear un archivo de intercambio. Esta es mi solución preferida en este 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
    

    Hecho. :) Sé que mucha gente se siente mal por usar archivos en lugar de particiones, pero ciertamente funciona lo suficientemente bien como espacio de intercambio de emergencia.

Jo Liss
fuente
44
Cambiar a un volumen EBS puede generar costos adicionales, como lo indican las otras respuestas. No usar swap o cambiar a una tienda de instancias parecen mejores soluciones.
isuldor
77
Usar la tienda de instancias es una mejor opción que EBS. EBS es un sistema de archivos de red, por lo que se conecta a la instancia EC2 a través de la misma conexión de red que todo lo demás. El almacén de instancias está conectado al hardware que aloja la instancia (es por eso que no persiste cuando detiene e inicia su instancia). El único momento en que EBS es una opción para el intercambio es cuando está utilizando un tipo de instancia que no viene con almacenamiento de instancia, es decir, el t1.micro (que dado que solo tiene aproximadamente 620 MB de RAM es probablemente el que realmente necesita emergencia intercambiar).
ColtonCat
Bs = 1M ya está en notación binaria, por lo que el multiplicador count = 2048 debería ser count = 2000, si no me equivoco.
ypocat
1
Si vas por 2GiB, entonces 1024 * 2048 parece correcto.
Jo Liss
25

La mejor ubicación para intercambiar en mi humilde opinión es la tienda de instancias. ¿Por qué? AWS no le cobra por E / S en la tienda de instancias. Además, la tienda de instancias es más eficiente que EBS en muchos casos. Solo asegúrese de tener un script que recrea el archivo de intercambio en caso de que detenga la instancia. Los reinicios están bien. ¿Por qué oh por qué no está allí por defecto?

Busquemos la tienda de instancias.

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

¡Hurra, 160.1GB gratis! Ponga su intercambio allí y olvide los excesos de $ 100 por servidor cuando su intercambio basado en EBS se enjambre por error. Desafortunada experiencia hablando aquí.

Aparentemente en algunos casos no ves la tienda de instancias.

Dependiendo del tipo de instancia, primero debe adjuntar los volúmenes del almacén de instancias a la instancia utilizando las opciones de mapeo de dispositivos de bloque. Si no hace esto, es posible que ni siquiera vea los dispositivos en / dev (según Cómo usar el almacenamiento "Instance Store Volumes" en Amazon EC2? )

sebwinadmin
fuente
1
solo quiero señalar que los usuarios de t1.micro en el nivel gratuito no pueden usar esta opción.
Reuben L.
20

Nota : Amazon ha cambiado su política de precios y no cobra por las solicitudes de E / S a partir de mediados de 2016. La respuesta se mantiene aquí por razones históricas, pero no hay implicaciones de costo de usar (o no usar) el intercambio en instancias respaldadas por EBS EC2.


Esto es por diseño. El intercambio está desactivado de forma predeterminada en las instancias respaldadas por EC2 EBS, para evitar costos impredecibles.

Si tiene una aplicación que necesita mucha memoria y que no funciona (digamos, en una instancia pequeña o pequeña), puede generar una gran cantidad de solicitudes de E / S en su volumen EBS. Amazon cobra $ 0.10 por 1 millón de solicitudes de E / S (consulte http://aws.amazon.com/pricing/ebs/ ) .

En condiciones normales no debe preocuparse por eso; por lo general, el costo de las solicitudes de E / S, incluso en casos más pequeños, unos pocos dólares, si es así. Entonces, si sabe que tiene una instancia del tamaño adecuado y que el intercambio se usará con poca frecuencia, continúe y habilítelo. Pero ten cuidado con las pequeñas instancias.

Si habilita el intercambio, es posible que desee vigilar los informes de uso. Opcionalmente, también puede configurar una Alerta de facturación yendo al Panel de control de CloudWatch y creando una nueva Alarma por el monto total facturado. De esta forma, se le notificará de inmediato, algo extraño está sucediendo con sus instancias.

Gui Ambros
fuente
Esta respuesta es un poco confusa o confusa para mí, ya que los tipos de instancia más comunes usan volúmenes SSD. aws.amazon.com/ec2/instance-types
Taylor Edmiston
2
@tedmiston: de hecho, esta respuesta ya no es aplicable. Me he ajustado para reflejar la nueva realidad, pero básicamente no hay ningún cargo por las solicitudes de E / S, por lo que ahora se puede habilitar el intercambio (o no) con una base técnica pura.
Gui Ambros
1

Verifique el /etc/fstabarchivo, probablemente se configuraron sin cambiar la imagen que está utilizando. Creo que algunas personas corren sin intercambio de servidores, ya que esperan nunca usar más que la memoria total; el intercambio hace que todo sea muy lento.

Sin embargo, siempre estoy paranoico sobre algún proceso que se dispara en la memoria, por lo que creo que sería prudente de su parte simplemente configurar una unidad de intercambio y recrear una imagen de la instancia ec2 en ejecución.

ehsanul
fuente
2
El intercambio ocasional no ralentiza el sistema.
laebshade
0

Una solución simple para ejecutar swapen EC2imágenes es ejecutar swapcomprimido con lz4in ramwith zram-init.

  • los scripts de servicio están disponibles para systemd& openrc.

Esta solución no tomar ramdistancia de la host:

ingrese la descripción de la imagen aquí

Stuart Cardall
fuente
1
Muy creativo, pero ¿no tendría más sentido usar su RAM como RAM real que usarlo como un sistema de archivos en memoria para el intercambio? (que se utiliza principalmente cuando se queda sin memoria) Reducir la cantidad de memoria disponible para que las aplicaciones creen intercambios parece contradictorio ...
HBruijn
Respuesta interesante, pero creo que usar EBS / tienda de instancias es probablemente una mejor solución de propósito general. Tengo un t2.nano con 512 MB de RAM y 512 MB de intercambio en EBS que funciona bien.
Tim
Esto claramente toma RAM del host (instancia EC2). ¿De dónde más proviene la RAM? El único beneficio de este enfoque es comprimir parte de su RAM total, pero no proporciona la capacidad de usar SSD como intercambio. En su lugar, podría usar el zswapque proporciona memoria caché RAM comprimida sobre un archivo / disco de intercambio normal: wiki.archlinux.org/index.php/zswap . Consulte cnx-software.com/2018/05/14/… para obtener más información sobre zram.
RichVel