¿Debería desactivar por completo el intercambio para el servidor web de Linux?

22

Recientemente, mi amigo me dijo que es una buena idea desactivar el intercambio en servidores web Linux con suficiente memoria. Mi servidor tiene 12 GB y actualmente usa 4 GB (sin contar la memoria caché y las memorias intermedias) bajo carga máxima.

Su argumento fue que, en una situación normal, el servidor nunca usará toda su RAM, por lo que la única forma en que puede encontrar la situación OutOfMemory se debe a algunos errores / ddos ​​/ etc. Entonces, en caso de que el intercambio esté apagado, el sistema se quedará sin memoria, lo que eventualmente bloqueará la memoria de acaparamiento del programa (muy probablemente el proceso del servidor web) y probablemente algunos otros procesos. En el caso de intercambio se gira encomerá RAM e intercambio y, finalmente, provocará el mismo bloqueo, pero antes de eso descargará procesos cruciales como sshd para intercambiar y comenzar a realizar muchas operaciones de intercambio, lo que provocará una desaceleración importante. De esta forma, cuando el sistema ddos ​​puede entrar en una condición completamente inutilizable debido a grandes retrasos y probablemente no pueda iniciar sesión y eliminar el proceso del servidor web o negar todo el tráfico entrante (todo menos ssh).

¿Es esto correcto? ¿Me estoy perdiendo algo (como el hecho de que la partición de intercambio es muy útil de alguna manera, incluso si tengo suficiente RAM)? ¿Debería apagarlo?

Poma
fuente
66
Entonces, todas las respuestas se reducen a afirmaciones de que 1. más memoria virtual es incondicionalmente mejor que menos, y 2. debe haber algún intercambio habilitado porque no es bueno, ninguno de los cuales está bien fundamentado.
NekojiruSou
2
Es erróneo pensar que el intercambio está destinado exclusivamente a la memoria de "reserva". Swap está destinado a un lugar para colocar memoria no utilizada (para que pueda usar su memoria real de manera más eficiente). Siempre deberías tener un intercambio. Si no tiene memoria, entonces no tiene memoria - punto. Este es un problema de gestión de capacidad, no de tendencia a intercambiar. Tengo una respuesta bastante larga serverfault.com/a/332205/75118 que intenta explicar mejor las intenciones de la memoria virtual.
Matthew Ife

Respuestas:

27

Diría que depende de su caso de uso y el resto de las respuestas lo han cubierto bastante bien. Después de todo, 4G de intercambio son una forma barata de comprar algo de seguridad. Y siento que esta baratura es lo que está haciendo que la gente no quiera apagarlo.

Pero déjame responder con una pregunta retórica. Si el dinero no es un problema y puede elegir entre dos sistemas, uno con 12G de RAM y 4G de intercambio, y otro con 16G de RAM y sin intercambio, ¿cuál elegiría? Desafortunadamente, la mayoría de las personas aún responderían que elegirían 16G de RAM y aún agregarían 4G de intercambio, lo que me falta.

Y en otra nota, personalmente encuentro un sistema de intercambio peor que un sistema bloqueado. Un sistema bloqueado provocaría que un servidor de respaldo en espera se haga cargo mucho antes. Y en una configuración activo-activo (o configuración de carga equilibrada), un sistema bloqueado se retiraría de la rotación mucho antes. Una victoria para el sistema sin intercambio nuevamente.

chutz
fuente
14

NO se recomienda desactivar el intercambio, incluso si tiene suficiente memoria. Si su servidor necesita más memoria y no la obtuvo, se bloqueará. Sin embargo, esto puede evitarse (hasta cierto punto) cuando tiene un área de intercambio.

Sí, el rendimiento de su servidor se degradará cuando use el intercambio, pero al menos será operativo y accesible. Luego, puede planear agregar más memoria cuando sea necesario si su servidor comienza a usar el intercambio.

Encontré esta página hablando de intercambio. Echa un vistazo a la tercera sección.

En lugar de desactivar el intercambio, puede controlar el intercambio .

Khaled
fuente
1
En la situación que describí, consumirá tanto intercambio como RAM y también se bloqueará. Se ejecuta durante unos meses y nunca utilizó más del 30% de memoria. Por lo tanto, es muy poco probable que salte al 100% tan rápido durante el funcionamiento normal. Entonces, si algún proceso se volvió loco y consumió 8 GB, significa que consumirá tanta memoria como el sistema operativo puede obtener, eso significa todo.
Poma
@Poma, también hay otros beneficios del intercambio. Además, puede permitir que el sistema viva mucho más tiempo cuando tiene un intercambio. Esto se debe a que el intercambio puede ser mayor que la memoria dada la disponibilidad de unidades HD baratas.
Khaled
6

No, no es una buena idea. 'algún proceso se volvió loco' significa que ya deberías haber llamado proactivamente

ulimit -d

en el momento de la creación del proceso o antes para establecer un límite en la memoria del segmento de datos por proceso, y tal vez un límite en el número de subprocesos

ulimit -T

por proceso Ulimit es tu amigo. Considere leer una de las guías de ajuste de memoria antes de desactivar el intercambio. También puede cambiar los parámetros del kernel a algunas cosas para tratar de manejar los ataques de DOS o los programas defectuosos.

Míralo de esta manera: la memoria total de tu sistema es RAM + intercambio. Si tiene 12 GB de intercambio, simplemente reduce la capacidad de VM del sistema a la mitad, deshabilitando el intercambio. Mala idea. Esto no es un debate, en realidad, es simplemente leer lo que otras personas han sabido de malas experiencias anteriores durante años. Es posible que tu amigo también necesite leer un poco.

jim mcnamara
fuente
5

Como han dicho otros, puede detener su servidor de manera efectiva mediante el intercambio, excepto cuando sea absolutamente necesario, jugando con el parámetro "intercambio". Esto controla cuán agresivamente el núcleo intercambiará páginas de memoria.

Puede ver lo que está configurado actualmente con:

cat /proc/sys/vm/swappiness

y puedes editarlo "en vivo" con (como root):

# echo "10" > /proc/sys/vm/swappiness

y para que persista, agregue lo siguiente a /etc/sysctl.conf:

vm.swappiness=10
Orlando Richards
fuente
2

Otra cosa buena que puedes hacer es cambiar a RAM usando zRAM. ¡Yo pienso que esta es una gran idea! Para el rendimiento, es como no tener intercambio, ¡pero también evita los bloqueos cuando el sistema está muy cargado!

Mira esto:

http://www.webupd8.org/2011/10/increased-performance-in-linux-with.html

Mi experiencia: en esta máquina donde escribo ahora, desactivé el intercambio, porque tengo 4 Gb de RAM (¡en 2009 fue mucho!). Solo tuve un par de problemas, ¡uno de ellos se abrió como 127 fotos al mismo tiempo por error!

PERO ... esta es una estación de trabajo, y puedo permitirme reiniciar si se cuelga. En un servidor, creo que es mejor tener intercambio, y el intercambio en RAM me suena bien.

CyberPlant
fuente
1

Como ya se ha dejado bastante claro, esta no es una buena idea. Por lo menos, el intercambio te da un respiro para cuando las cosas no son normales. Por ejemplo, en un sistema que miro, que normalmente tiene solo unos pocos visitantes por día, hubo un pico de tráfico masivo causado por una página mencionada en una revista. Esto dio como resultado que el servidor web utilizara el espacio de intercambio por primera vez desde que se puso en servicio. Sin ese espacio de intercambio, las cosas no habrían ido muy bien.

John Gardeniers
fuente
0

No es Buena idea. Puede definir 2 archivos de intercambio con diferente prioridad. Uno más pequeño que está en uso y uno más grande que se usará en caso de que el primero se llene.

También vm.swappiness puede ayudarlo a controlar cuán agresivamente se produce el intercambio de discos.

Dragos
fuente
0

Si inserta un 0 en vm.swappiness, eso no significa necesariamente que el sistema no se intercambie. Es un parámetro para determinar cuán agresiva sería la tendencia del kerne a intercambiar, pero no desactiva el intercambio.

Nuevamente, el intercambio no es malo, pero la paliza sí. Eche un vistazo a los datos de sysstat y eso debería dar un buen puntero sobre ellos.

Soham Chakraborty
fuente