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?
Respuestas:
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.
fuente
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 .
fuente
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.
fuente
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:
y puedes editarlo "en vivo" con (como root):
y para que persista, agregue lo siguiente a /etc/sysctl.conf:
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente