¿Necesitamos la partición de intercambio en un servidor LAMP?


14

¿Necesitamos realmente cambiar la partición en el servidor ubuntu con LAMP? Creo que no lo necesito, pero es mejor saber con certeza si no causará un comportamiento imprevisto.
En realidad mis pensamientos fueron:

  • El servidor nunca hiberna
  • Si se está intercambiando, uno debe pensar en el equilibrio de carga / modelado del tráfico, etc.

¿Tengo razón, puedo desactivar el intercambio para el servidor de producción?

¡Gracias!

Respuestas:


14

¿Tengo razón, puedo desactivar el intercambio para el servidor de producción?

No. Siempre tenga algo de espacio de intercambio.

Intenté ejecutar un servidor de producción sin intercambio una vez y aproximadamente una semana después, después de una actualización de Wordpress, PHP comenzó a comer mucha más RAM de la que habíamos contado. Cuando te quedas sin RAM y tienes habilitado el intercambio, las cosas se ralentizan (a veces mucho, a veces solo un poco, dependiendo de lo que se introduce allí), pero puedes iniciar sesión, encontrar el problema e intentar solucionarlo eso.

Cuando te quedas sin RAM y no tienes intercambio, los procesos mueren, las cosas se estancan y muchas veces tu única opción es reiniciar. Pero hasta que reinicie, las cosas probablemente se romperán.

En mi mundo, roto es mucho peor que lento.

Por supuesto, si encuentra que su sistema usa constantemente grandes porciones de intercambio (a menudo usará algunas solo como una forma de mover cosas viejas en caché), obviamente tiene un problema ("insertar RAM por favor"), pero tenerlo como definitivamente se recomienda una red de seguridad.


En respuesta al comentario de SpamapS:

En el mundo de los "sitios web exitosos", tiene failovers en caliente, equilibrio de carga y otras herramientas que permiten que una máquina explote y no tenga ningún efecto en el resto del sitio. Pero eso requiere mucho efectivo. Tener hardware redundante no es económico para la mayoría de los sitios, incluso si obtienen dinero.

Estoy completamente en desacuerdo con tu comentario sobre el tiempo de actividad. En una configuración tradicional de comercio electrónico, si las personas no pueden ver su sitio, no pueden comprarle a usted. Esto no es solo comercio electrónico, todos los intereses comerciales en línea toman mucho más críticas si estás caído por algún tipo de período. Lo sé porque alojo sitios y servicios para empresas y administro mis propios sitios. Lento = gruñón pero Abajo = furia. Incluso si solo baja un minuto a la vez, si un usuario ve un aviso de "baja por mantenimiento" más de un par de veces, asume que no puede mantener el sitio en funcionamiento.

Un servidor lento es menos que ideal, pero el intercambio no está ahí para ejecutarse todo el tiempo, es un último recurso para permitir que las cosas sigan funcionando mientras las arregla.

También asume que solo hay un servicio ejecutándose en la máquina. De nuevo, esto podría ser cierto si tienes megabucks para dividir todo, pero en el mundo real, las cosas se agrupan. Múltiples sitios web, ssh daemons, servidores ftp, servidores de correo electrónico, etc. Un proceso que se filtre en el intercambio podría ni siquiera afectar a otro servicio. Sin intercambio, todo tiene la misma probabilidad de terminación instantánea y aleatoria. No tienes control sobre eso.

Por supuesto, el intercambio no es la única respuesta. Necesita monitoreo para alertarlo cuando no tenga ram, pero simplemente desconectar y reiniciar no es la respuesta para la mayoría de las personas. Estoy seguro de que esto funciona para cualquier sitio web multinacional del que sea responsable, pero para nosotros, simples mortales (que constituyen la mayoría de Internet), hacerlo es un suicidio comercial.


Las mismas experiencias aquí, un poco ... fue un error de mi parte, no una decisión deliberada. Un servidor sin intercambio es un infierno para reparar, especialmente si decide matar sshd.
Javier Rivera

Tengo aproximadamente 16 Gb de RAM, la mitad está almacenada en caché para E / S rápidas, el resto es para LAMP, el intercambio siempre es gratis, o algunas veces hay pocos megas, pero creo que siempre está apagado ...
Arman

3
En el mundo de los sitios web exitosos, la falta de respuesta es peor que rota. Los usuarios realmente apreciarán una falla RÁPIDA (que, por cierto, su código de interfaz de JavaScript debe manejarse con gracia), pero lo ODIAran por ser lento. Deshazte del intercambio, solo retrasa lo inevitable. -1
SpamapS

1
@Oli: Ejecutar N + 1 ya no requiere megabucks, o incluso mucho dinero. De hecho, apenas requiere habilidades especiales. Es inevitable que un servidor se caiga por varias razones, y no es tan difícil evitar que esto no sea un problema. Si tiene un servidor LAMP autónomo que hace todo, entonces lo que cuesta más; ¿Configurando dos más y un equilibrador de carga (en EC2 con t1.micros e instantáneas de EBS, esto puede ser MUY barato), o su sitio es inusualmente lento en su día más grande? Compruebe los datos de google ... Creo que está claro bit.ly/hB1AD1
SpamapS

1
Gran respuesta, cubriendo casos de servidores del mundo real. Agregar hardware redundante, LB, monitoreo, cachés de RAM, etc., son increíblemente importantes, y tendrá tiempo para configurarlos y depurarlos si no está invirtiendo porque ahorró espacio de intercambio.
ImaginaryRobots

4

Tengo que estar en desacuerdo con tener intercambio en servidores de producción.

En mi experiencia, el intercambio de disco rotativo hace que su sistema sea menos predecible y más propenso a frustrar fallas en todo el sistema. Un servidor popular de alta carga que está haciendo cualquier cosa con un disco lento local rápidamente se convertirá en algo mucho peor que un estado de falla. Los tiempos de respuesta aumentarán a 100 veces su nivel normal, y cosas simples como iniciar sesión a través de la consola o ssh pueden tomar minutos.

El intercambio de SSD es un caso especial y al menos eliminaría la ralentización del tiempo de búsqueda que generalmente mata al sistema. Sin embargo, las escrituras siguen siendo lentas, por lo que aún terminará esperando mucho, mucho tiempo para recuperarse de un proceso fuera de control.

Sin intercambio, su servidor LAMP simplemente matará los procesos para liberar RAM. Un monitoreo adecuado debería alertarlo y eliminar servidores de la producción si se eliminan los procesos críticos. El peor de los casos aquí es que todos tus métodos de inicio de sesión se eliminan y tienes que hacer un restablecimiento completo / ciclo de encendido. El peor de los casos es igual de probable con una máquina de intercambio fuera de control, pero mucho más difícil de detectar.

Si está utilizando PHP, habilite los límites de memoria y monitoree sus registros para detectar fallas. Aquí hay un truco, establezca el límite más bajo en su servidor de desarrollo que en producción. Si está utilizando mod_php en Apache, configure MaxRequestsPerChild en unos pocos miles, de modo que muera httpd antes de crecer demasiado con el tiempo. ¡Sobre todo, controle el uso de la memoria! Muchas veces la memoria se arrastra con el tiempo, y solo necesita reiniciar periódicamente un servicio con fugas mientras depura el problema.


1
Gracias por compartir su experiencia. Estaba contando con problemas similares, cuando ssh estaba tomando Inf. Simplemente forcé a los procesos a tener memoria limitada, lo que me permitió ejecutar el ssh y corregir scripts con errores.
Arman

Una de las discusiones más interesantes sobre espacio de intercambio en producción que he visto en Internet. (todo el hilo, pros y contras)
dpb

3

El espacio de intercambio se usa cuando su sistema decide que necesita memoria física para los procesos activos y no hay suficiente memoria física no utilizada disponible. Si el sistema necesita más recursos de memoria o espacio, las páginas inactivas en la memoria física se mueven al espacio de intercambio, liberando así esa memoria física para otros usos.

Esta situación sucederá muchas veces en el servidor.

un). Un script no optimizado puede consumir gran cantidad de memoria
b). Las secuencias de comandos como la copia de seguridad siempre consumirán una gran cantidad de memoria
c). tráfico pesado

Por lo tanto, es una buena práctica tener algo de espacio de intercambio.

Más detalles: https://help.ubuntu.com/community/SwapFaq


Gracias por la explicación. Si uno tiene un script defectuoso, en cualquier caso bloqueará el servidor, los límites del sistema deberían controlar sus scripts, ¿no es así?
Arman

aneeshep, si está intercambiando durante el tráfico pesado, su sistema será 100 veces más lento de lo normal. Eso generalmente no es aceptable.
SpamapS

2

El uso de intercambio le dará una protección adicional contra la inestabilidad del servidor. Es posible que haya momentos en que la RAM se esté agotando y en el servidor sin intercambio que podría provocar un bloqueo suave.

Probablemente estoy en minoría ahora cuando digo, todavía tiene sentido, como solían recomendar, tener el doble de intercambio que la memoria principal. Incluso en un sistema con 96 GB de RAM.

No cuesta mucho y, si lo necesita algún día, se alegrará de haberlo recibido. La razón para habilitar el intercambio es solo un análisis de costo-beneficio muy sencillo. ¡Hazlo! :-)


0

Me gustaría agradecer a Oli por la hermosa respuesta, lo sé. ¡Encuentro que la partición es un tema siempre verde! Estoy totalmente de acuerdo con la línea de la publicación de Oli y me gustaría compartir esta secuencia de comandos, por supuesto mejorable, que uso para monitorear el uso de intercambio de mis servidores.

Siempre configuro servidores y servicios para que funcionen sin ningún tipo de intercambio. Cuando sea así, asegúrese de que algo esté yendo mal o, en el mejor de los casos, que algo supere sus planes iniciales.

Calculo este script cada media hora en un entorno de producción. Me enviará una notificación si Swap use! = 0k. Podré investigar o tomar medidas sobre el tema, la mayoría de las veces, antes de que las cosas se pongan realmente mal .

Espera que tenga: bash, top, echo, awk y un comando de correo en funcionamiento, sin realizar ninguna comprobación.

Espero que ayude.

#!/bin/bash
CURRSWAP=$(top -b -n1 |grep Swap |awk '{print $4}')
ECOMM="echo $CURRSWAP means healthy, I wont take any action."
CURRDATE=$(date)
MAILDST="your@email.addr"

case $CURRSWAP in
  [0]k) $ECOMM
        exit 0
        ;;
  *)    echo -e "Server: $HOSTNAME \n Date: $CURRDATE \n Current Swap partition usage: $CURRSWAP" | mail -s "Warning from $HOSTNAME" -- $MAILDST
        exit 0
        ;;
esac
exit 0
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.