GNU/Linux >> Tutoriales Linux >  >> Linux

Análisis de casos a favor y en contra de la configuración del espacio de intercambio en instancias de nube

Si desea iniciar una discusión con un usuario de Linux, pregunte sobre intercambio memoria. Algunos lo elogian como un colchón o una red de seguridad, mientras que otros lo menosprecian como una muleta y un destructor del rendimiento del sistema. Nacida en la década de 1960, la memoria de intercambio ha evolucionado a lo largo de los años en Linux para cumplir dos funciones esenciales:

  • Memoria de emergencia cuando un sistema consume toda su RAM y aún necesita más
  • Un estacionamiento para las páginas de memoria que se usan con poca frecuencia y que ocupan una valiosa memoria RAM del sistema

Muchas distribuciones de Linux, incluida Red Hat, recomiendan la memoria de intercambio para todos los sistemas. Sin embargo, si observa la mayoría de las instancias en la nube de varias distribuciones, encontrará que la memoria de intercambio está ausente.

[ También te puede interesar: Solución de problemas de Linux 101:rendimiento del sistema]

Descripción general del intercambio

El intercambio existe en la mayoría de los sistemas como una partición en un disco. Después de particionar, los administradores formatean la partición con mkswap , habilitarlo con swapon y el núcleo ve instantáneamente la memoria de intercambio disponible. Los sistemas sin una partición disponible pueden usar un archivo de intercambio, que es solo un archivo en un sistema de archivos existente que está formateado con mkswap y habilitado.

Ambos métodos funcionan bien, pero colocar un intercambio en una partición conduce a un mejor rendimiento ya que se salta la sobrecarga de un archivo de intercambio en una partición existente.

Cuando la memoria RAM del sistema es escasa, Linux puede almacenar páginas de memoria en el intercambio para evitar eliminar procesos y bloquear el sistema. Los discos son mucho más lentos que la RAM del sistema y esto reduce el rendimiento del sistema hasta que la RAM del sistema se libera. Si el uso de la memoria continúa aumentando hasta el punto en que la memoria RAM del sistema y el intercambio se agotan por completo, aparece el asesino de falta de memoria (OOM) y comienza a matar procesos hasta que haya suficiente RAM disponible.

El consejo de larga data sobre el tamaño de intercambio es el doble del tamaño de la RAM de su sistema. Por ejemplo, asigne 2 GB de intercambio para sistemas con 1 GB de RAM del sistema. Aunque esta proporción funciona bien para sistemas más pequeños, no se amplía para sistemas con cientos de gigabytes de RAM del sistema.

El caso del intercambio en la nube

El auge de los microservicios (pequeños servicios interconectados que forman una gran aplicación) llevó a las empresas a implementar una mayor cantidad de instancias más pequeñas. Las instancias más pequeñas vienen con menos RAM del sistema, lo que aumenta el riesgo de que aparezca el temido asesino OOM para eliminar procesos hasta que el sistema tenga suficiente memoria libre.

Agregar intercambio a estos sistemas ayuda de dos maneras:

  • Primero, los procesos pueden salir rápidamente de la memoria RAM del sistema para intercambiar durante los períodos de alta carga. Los administradores aprenden acerca de estos eventos de sus sistemas de monitoreo y tienen tiempo para investigar el motivo de la ráfaga mientras ocurre en el sistema. En el caso de fugas de memoria, los desarrolladores pueden inspeccionar el proceso para comprender qué salió mal mientras aún está vivo. Esto también puede ser una señal de que los administradores necesitan tipos de instancias más grandes para su aplicación a medida que crece.
  • En segundo lugar, el kernel de Linux vigila las páginas de memoria que se utilizan con poca frecuencia y las envía a intercambio para preservar la valiosa memoria RAM del sistema. El sysctl configurando vm.swappiness controla el deseo del núcleo de empujar las páginas de memoria para intercambiar. Esto podría ayudar a una instancia en la nube al mantener las páginas más activas en la memoria RAM del sistema mientras se empujan las páginas que rara vez se usan para intercambiar memoria.

El caso contra el intercambio en la nube

La analogía de "mascotas contra ganado" surge con frecuencia cuando se habla de instancias en la nube y los administradores eliminan el intercambio, ya que pueden reemplazar automáticamente una instancia que se comporta mal por una nueva. Con el tiempo, sus métricas de monitoreo muestran un aumento en las instancias que necesitan reemplazo debido a que el asesino OOM desconecta su aplicación. La solución podría ser instancias más grandes o una mayor investigación de las fugas de memoria bajo carga. Systemd también reiniciará estos procesos rápidamente cuando sea posible.

La elección de una ubicación de memoria de intercambio en las instancias de la nube requiere más reflexión y planificación. En servidores físicos, el intercambio en un disco Non-Volatile Memory Express (NVMe) conectado localmente es lo suficientemente rápido, pero ¿qué pasa con una instancia en la nube con almacenamiento externo montado, como Elastic Block Storage (EBS) de AWS? El rendimiento en EBS varía según el tipo de EBS que elija y sus vecinos en el sistema. El intercambio en un sistema de almacenamiento remoto podría provocar un rendimiento deficiente de la instancia cuando el sistema desborda su RAM. Los administradores pueden optar por omitir el intercambio y reemplazar estas instancias cuando desbordan su RAM en lugar de lidiar con solicitudes de manejo de servidor de bajo rendimiento.

Finalmente, muchas instancias en la nube pasan a formar parte de los clústeres de Kubernetes y OpenShift, y enfrentan un desafío cuando se trata de memoria de intercambio. Existe un problema de GitHub de larga duración sobre el manejo adecuado de la memoria de intercambio, ya que descarta la contabilidad de la memoria para los contenedores. Existen soluciones alternativas, pero la memoria de intercambio generalmente se omite en estos sistemas.

Implementación de instancias en la nube con intercambio

Si decide que el aprovisionamiento de memoria de intercambio beneficia a sus aplicaciones, cloud-init le brinda la posibilidad de aprovisionar memoria de intercambio en el primer arranque utilizando los mounts módulo. Simplemente agregue algunas líneas a sus datos de usuario de configuración de nube existentes:

swap:
    filename: /swapfile
    size: auto
    maxsize: 4294967296

Esta configuración le dice a cloud-init que cree un archivo de intercambio en /swapfile con un tamaño automático igual o inferior a 4GBs. La fórmula para el tamaño de intercambio automático se encuentra en el código fuente de cloud-init:

formulas = [
    # < 1G: swap = double memory
    (1 * GB, lambda x: x * 2),
    # < 2G: swap = 2G
    (2 * GB, lambda x: 2 * GB),
    # < 4G: swap = memory
    (4 * GB, lambda x: x),
    # < 16G: 4G
    (16 * GB, lambda x: 4 * GB),
    # < 64G: 1/2 M up to max
    (64 * GB, lambda x: x / 2),
]

El tamaño de intercambio recomendado por Red Hat difiere ligeramente:

  • 2 GB o menos de RAM del sistema :2x RAM
  • Más de 2 GB a 8 GB : 1x RAM
  • Más de 8 GB a 64 GB : 4 GB mínimo
  • Más de 64 GB : 4 GB mínimo

Puede especificar manualmente la memoria de intercambio (en bytes) con el size: parámetro
en la configuración de la nube:

swap:
    filename: /swapfile
    size: 2147483648  # 2 GiB

Intercambio de aprovisionamiento en una instancia de nube existente

Para las instancias existentes, un archivo de intercambio suele ser el método más fácil para habilitar la memoria de intercambio. En este ejemplo, coloque un archivo de intercambio de 2 GB en /swapfile :


# BTRFS only #################################################################
# We must disable copy-on-write updates for swap files on btrfs file systems.
# The 'swapon' step fails if you skip these steps.
truncate -s 0 /swapfile
chattr +C /swapfile
# BTRFS only #################################################################

# A 2 GiB swap file.
dd if=/dev/zero of=/swapfile bs=1MiB count=2048

# Set the correct permissions on the swap file.
chmod 0600 /swapfile

# Format the swapfile.
mkswap /swapfile

# Enable the swapfile.
swapon /swapfile

# Add it to /etc/fstab to enable it after reboot.
echo "/swapfile none swap defaults 0 0" >> /etc/fstab

Verifique si su memoria de intercambio está lista:

$ cat /proc/swaps
Filename        Type    Size      Used    Priority
/swapfile       file    2097148   0       -2

[ Curso gratuito en línea:Descripción general técnica de Red Hat Enterprise Linux. ] 

Terminar

La memoria de intercambio proporciona dos valiosos beneficios:

  • Un colchón de seguridad cuando el uso de RAM del sistema aumenta a niveles peligrosos
  • Un estacionamiento para páginas de memoria poco utilizadas que ocupan un espacio valioso en la memoria RAM del sistema 

Ese colchón de seguridad conlleva una penalización en el rendimiento, ya que la paginación de la memoria en los discos es increíblemente lenta en relación con la memoria del sistema.

Las implementaciones en la nube rara vez ven la memoria de intercambio implementada, pero el intercambio todavía tiene beneficios allí. La elección de implementar el intercambio permite un colchón de seguridad cuando las aplicaciones se comportan mal, pero podría hacer que una aplicación funcione lentamente hasta que se resuelvan los problemas de consumo de memoria. Omitir el intercambio elimina el colchón, pero asegura que una aplicación que se comporta mal se detenga de inmediato. Los administradores de la nube deben tener un plan para manejar estas situaciones.

Afortunadamente, cloud-init aparece en la gran mayoría de las instancias en la nube y permite la creación de archivos de intercambio con solo unas pocas líneas de YAML. La memoria de intercambio también es fácil de configurar después de la implementación mediante comandos o secuencias de comandos de shell simples.

Ya sea que elija implementar la memoria de intercambio o prescindir de ella, asegúrese de tener un plan cuando suceda lo peor. Supervise los sistemas de forma adecuada y mantenga una visión holística de la aplicación a la que sirven.


Linux
  1. ¿Cuál es la cantidad correcta de espacio de intercambio para un sistema Linux moderno?

  2. Linux:¿qué son la memoria alta y la memoria baja en Linux?

  3. Diseñe y construya servidores en la nube para la estabilidad

  4. Solución de problemas de poco espacio en disco para un servidor en la nube de Linux

  5. Solución de problemas de poco espacio en disco para un servidor en la nube de Windows

Kubernetes para portabilidad de nubes múltiples e híbridas

Cómo usar Wireshark para capturar y analizar paquetes de red

7 comandos para comprobar el uso de la memoria y el espacio de intercambio en Debian 10

Cómo borrar el caché de la memoria RAM, el búfer y el espacio de intercambio en Linux

Cuánto espacio de intercambio agregar para Oracle Database en Linux

configuración de sysctl para alta carga y prevención de DDoS