CentOS ¿Cuánto SWAP para 16GB de RAM?


11

¿Cuánto SWAP le darías a una instalación de CentOS en un Quad Core XEON dual con 16GB de RAM que ejecutará un sitio web php con un backend mysql - carga media / pesada?

centos  swap 

Respuestas:


20

No más que un concierto o dos: quieres un poco de intercambio disponible, por si acaso y porque ayuda a que las cosas funcionen un poco mejor, pero si alguna vez llegas al punto donde estás intercambiando mucho, la máquina está funcionando para ser inútil, y en una situación catastrófica real, en realidad es mejor con un espacio de intercambio más pequeño, porque entonces activará el asesino OOM más temprano que tarde.


77
Y recuerde que siempre puede agregar más espacio de intercambio más tarde si es necesario haciendo algo de espacio y creando un nuevo volumen (si usa LVM) o usando un archivo como intercambio con algo comodd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file
David Spillett el

3
Como nota al margen, puede controlar el grado de intercambio ajustando el valor / proc / sys / vm / swappiness.
David

2
Voy a tener que estar en desacuerdo con algunos puntos aquí. . . Primero, el disco es barato, también podrías arrojarle un par de GB. En segundo lugar, el asesino OOM puede derribar toda tu caja si tienes mala suerte. Confiar en él de alguna manera o considerarlo mejor para desencadenar al asesino de OOM es una muy mala idea. Pensar que una caja potencialmente con manguera es mejor que una posible desaceleración también es una mala idea. El único momento que sería razonable es si tuviera una configuración muy específica planeada para esa situación.
Christopher Cashell

Nota al margen, generalmente es preferible establecer el intercambio en una partición y no en un archivo para evitar gastos generales y simplificar el proceso de arranque. sin embargo, usar un archivo funcionará. 4 GB es todo lo que cualquier sistema debería necesitar, dudo que de todos modos se intercambie mucho con
Silverfire

De hecho, según Andrew Morton, el rendimiento debería ser casi el mismo entre un archivo de intercambio
Journeyman Geek

8

Pido disculpas por la larga respuesta. ¡He estado esperando poner estas cosas en algún lugar accesible por un tiempo!

TLDR; Teóricamente hablando, la respuesta sería "probablemente no menos que la cantidad total de memoria residente que todas sus aplicaciones quieren usar"

Trataré de explicarte si te quedas conmigo ...

Un poco sobre memoria virtual

Siento que hay una idea errónea común en estos días sobre cuál es el valor del intercambio y para qué sirve. A menudo se considera que swap se entiende como un 'banco de reserva' para la memoria cuando se está quedando sin memoria. Sí, esto es en parte cierto, pero el núcleo no quiere usar su swap como banco de reserva . ¡Además, el kernel nunca quiere invocar el disco para obtener los datos que busca!

En el espacio de la aplicación, hay varias cosas que el núcleo mantendrá en la memoria.

  • Datos de archivo mapeados.
  • Sistemas de archivos tmpfs.
  • Memoria de aplicación sin formato asignada en tiempo de ejecución.
  • Código de aplicación (como cosas en el segmento de datos de formatos ELF)
  • Datos de archivos privados mapeados.

Para fines de gestión de memoria, la asignación de memoria está respaldada de una forma u otra por un dispositivo de soporte.

La memoria respaldada por archivos es la memoria que proviene de un archivo y en un O / S típico constituye la gran mayoría de la asignación de memoria en el sistema. Incluye archivos como bibliotecas compartidas que se han cargado, archivos leídos del disco y almacenados en la memoria caché de la página y archivos mapeados desde el disco (de hecho, el núcleo no distingue las páginas entre los archivos en la memoria caché de la página y los archivos mmapped como esencialmente la misma cosa).

Lo mejor de esta memoria desde el punto de vista de los núcleos es que es desechable, es decir, debería ser posible volcar estas páginas si necesita memoria para otra cosa y esto es exactamente lo que hace la memoria caché de la página si la memoria de repente es un requisito.

La memoria anónimamente respaldada es otra cuestión. La memoria de esta región es anónima porque, bueno, no hay ningún archivo en el disco que realmente contenga estos datos. Esto normalmente está compuesto por la pila de aplicaciones, el montón, cualquier cosa en tmpfs y mmapped data que es privada y ha sido modificada (ya que no puede sincronizar estas cosas nuevamente en el disco). Como simplemente no hay un archivo válido en el sistema de archivos para volver a escribir estas páginas si cambian, los medios de intercambio respaldan la memoria anónimamente respaldada.

Ahora, el núcleo sabe que cuando la memoria es escasa, es mucho más barato deshacerse de la memoria respaldada por archivos que la memoria mapeada anónimamente, eso es porque los datos anónimos tienen muchas más posibilidades de estar "sucios" que los datos respaldados por archivos, de hecho, por defecto, el núcleo califica la memoria respaldada anónimamente como 80 veces más valiosa que la memoria respaldada por archivos y esto es en realidad lo que hace el modificador de intercambio en Linux (vea esta publicación aquí si desea saber qué está alterando exactamente el parámetro de intercambio).

El peor de los casos

El peor de los casos cuando se trata de un servidor fuera de control y OOM se basa en el hecho de que pasa demasiado tiempo manejando las solicitudes de E / S en lugar de atender las solicitudes de asignación de memoria. Hay dos condiciones que pueden invocar este criterio.

  • Intercambiar memoria anónima todo el tiempo para buscar páginas en demanda o asignar más páginas para una aplicación.
  • Pasa demasiado tiempo buscando datos del disco porque no está en la memoria de lo que le das para ejecutar procesos que desean tiempo de CPU.

El primero, es el problema comúnmente pensado. Es decir, dado que gran parte de la memoria vive dentro del intercambio, uno necesita intercambiar la memoria anónima de la RAM, volver a colocarla en el intercambio, luego tomar algo del intercambio y ponerlo en la RAM real. Esta operación es muy costosa, ralentiza la máquina hasta el punto en que puede convertirse en una situación irrecuperable (ya que hay más cosas haciendo cola para las demandas de la página de lo que se puede servir desde E / S).

El segundo es menos considerado pero igual de importante. Si asigna casi toda su memoria a datos de aplicaciones reales, no durará mucho. Casi todas las aplicaciones se basan en la lectura de archivos del sistema de archivos para operar, esto podría deberse a que algunas instrucciones viven en una biblioteca compartida o porque necesita leer /etc/resolv.conf para una llamada a la biblioteca, o cualquier otro propósito. Es totalmente plausible detener un sistema operativo; sin embargo, tiene suficiente memoria para todas sus aplicaciones, pero dado que su cola hace tantas solicitudes de E / S, nada tiene la oportunidad de completarse correctamente.

Qué quiere hacer el núcleo con su intercambio

El núcleo quiere usar su intercambio para deshacerse de las páginas que están desperdiciando memoria, por lo que puede usar esa memoria para otra cosa.

Básicamente, en el funcionamiento normal, al núcleo le encanta llenar agresivamente el caché de la página con datos leídos del disco, esto significa que no leerá el disco para los mismos datos. Este es un buen diseño y puede reducir enormemente las E / S. Ahora, es posible que tenga alguna aplicación en la memoria que duerme durante 3 días, se despierta, hace un montón de trabajo y luego duerme otros 3 días.

Lo que le gustaría hacer al núcleo con estos datos es cambiarlo para dejar espacio para la actividad del sistema de archivos, ya que tiene muchas más posibilidades de utilizar estas páginas con más frecuencia que las páginas que utiliza para su aplicación. El intercambio, en este sentido, podría ser una transacción de 16 kb a su medio de intercambio que difícilmente debería sentir, pero a cambio liberó 16 kb de memoria que podría usarse para almacenar cuatro archivos de datos.

Para qué no quiere usar el kernel swap

El núcleo definitivamente no quiere usar su intercambio para asignar más memoria anónima intercambiando alguna otra memoria anónima, esta es la situación que más preocupa a las personas y con razón.

Sin embargo, debo señalar que si ha asignado tanta memoria que el kernel no tiene más remedio que hacer esto, este es un problema de configuración de los administradores del sistema, no del kernel en sí, solo está tratando de hacer lo mejor por el opciones que le has dado!

Si tiene una gran cantidad de intercambio, ¿aumenta la posibilidad de usarlo?

¡No! Si tiene 1G de ram y 4G de intercambio, ¡no hay un 80% de posibilidades de que sus datos se intercambien! ¡El núcleo quiere usar el intercambio solo cuando las páginas en la memoria se pueden servir mejor haciendo otra cosa!

¿Es ventajoso no usar swap en absoluto?

Nunca haria esto. El intercambio permite que el O / S elimine la memoria que necesita tener, pero nunca está en uso. Si no tiene un intercambio, solo se tragará la memoria que nunca recuperará, por lo que podría ver una mejora significativa en el rendimiento al permitir, por ejemplo, que la caché de la página lo tenga.

¿Cuál es el mejor intercambio para tener

Hablando teóricamente, descubra cuánta memoria residente + 20% para salvaguardas como llamadas de biblioteca entrantes que tienen que asignar memoria del montón, luego configure su intercambio a esa cantidad. Esto (teóricamente de todos modos) permitiría que el sistema operativo intercambie toda la memoria anónima si tuviera que dar paso a algo más útil.

Si tengo la oportunidad del kernel de cambiar todo lo que es peligroso, ¿verdad?

Recuerde, el kernel no quiere intercambiar para dar lugar a una asignación de memoria más anónima aquí, solo intercambiará páginas que no estén en uso para favorecer algo más que haga un mejor uso del espacio.

Si está intercambiando memoria anónima solo para asignarla desde una memoria más anónima, está haciendo algo mal y necesita más memoria RAM o para volver a ajustar su pila de aplicaciones de todos modos.

¿Cuánta RAM necesitarías?

Por supuesto, debe permitir suficiente RAM para ejecutar todas sus aplicaciones, pero probablemente debería permitir un extra de 2G de RAM para que se llene el caché de página, tal vez más. El caché de página hace que su computadora sea mucho más rápida y sus discos duren más. Si está pensando en ejecutar un servidor web, tener aún más para el almacenamiento en caché de páginas es una buena idea debido a la gran cantidad de contenido estático que puede recuperar y reutilizar desde el almacenamiento en caché de páginas que se entregaría (si el rendimiento de su servidor web es de 5 mb / s, realmente no ¡quiero recuperar ese contenido de 5mb / s que estás generando desde tu disco después de todo!).

Qué hacer si realmente no confías en Linux para intercambiar correctamente

Si realmente le preocupa, puede asignar más memoria de la que tiene:

  • Establezca la cantidad de su intercambio para que no sea más que su RAM
  • Establezca / proc / sys / vm / overcommit_memory en 2
  • Establezca / proc / sys / vm / overcommit_ratio para que sea un valor que nunca supere los límites físicos de RAM. Consulte la documentación del kernel para averiguar cuál sería ese número para usted.

¿Cuál es la mejor manera de ajustar mi memoria para mi aplicación?

  • Comprende lo que realmente hace el intercambio.
  • Use CGroups para asignar los recursos correctos por aplicación.
  • Cambie el modo de sobrecompromiso mencionado anteriormente para que el sistema operativo aplique límites estrictos.
  • Use cgroups como el anterior para establecer las prioridades de OOM en las aplicaciones que realmente desea mantener si no tiene memoria y la aplicación que realmente quiere deshacerse si no tiene memoria.

El vendedor recomienda una configuración diferente.

Escucha eso en su lugar. Algunas aplicaciones están escritas de tal manera que invocan deliberadamente el núcleo para que sus páginas estén activas sobre todas las demás. Para ser honesto, este es un truco desagradable, pero rompe la capacidad del núcleo para administrar la memoria sin problemas cuando sucede. Si su proveedor le brinda información específica, es probable que pertenezcan a esta categoría y escuchen lo que dicen.

En resumen

  • Swap está destinado a ser utilizado como un lugar para poner memoria desperdiciada. No como 'memoria libre'
  • Tener grandes cantidades de intercambio no tiene ningún efecto en sus posibilidades de usarlo.
  • El núcleo realmente quiere impedir que acceda al disco para sus datos. Esto se aplica de la misma manera, si no más, a la memoria caché de la página que al intercambio de espacio.
  • El kernel hará todo lo posible para honrar la configuración que le da a las aplicaciones que ejecuta. Pero no se sorprenda si tiene OOM si tiene 500 niños apache que ocupan 32M de memoria. Eso es un error de la configuración que elija, no de la administración de memoria.

El kernel generalmente hace un muy buen trabajo al administrar la memoria virtual correctamente. Casi siempre es el caso de que su aplicación está asignando más memoria de la que posiblemente podría esperar trabajar y eso es lo que está causando un OOM.

Swap solía usarse como 'memoria de reserva', pero ya no es su propósito principal, así que no piense en usarlo así. En cambio, aprecie que su núcleo probablemente sepa mejor para qué quiere usar su memoria. Déle espacio para tomar esas decisiones y se beneficiará de una mejora general del rendimiento.


2

Del documento "Oracle 10g Server en Red Hat® Enterprise Linux® 5 Recomendaciones de implementación".

Oracle proporciona recomendaciones genéricas sobre el tamaño del intercambio en MetaLink Note 169706.1. Estas recomendaciones pueden conducir a la creación de un espacio de intercambio muy grande en sistemas con gran cantidad de memoria. El intercambio muy grande puede causar una degradación severa del rendimiento del sistema y puede resolverse reduciendo el espacio de intercambio. Red Hat no recomienda asignar más de 4 GB para el intercambio en Red Hat Enterprise Linux 5.

Entonces, para 16 GB no debe tener más de 4 GB de intercambio.

PD. También vale la pena señalar que invocar oomes casi siempre mejor que el proceso de intercambio inutilizable que usa todo el ancho de banda de E / S.



-1

De lo que recuerdo de la documentación de Linux: si su RAM es mayor de 2 GB, entonces intercambia = (ramSize + 2). Si es menor, entonces intercambia = (ramSize * 2)


-2

Encontré este documento para usted, debería ayudarlo a tomar esa decisión, aquí está: ¿Qué es Swap Space? , pero ninguna de las respuestas anteriores es correcta


1
El documento al que se vinculó no está de acuerdo consigo mismo. Siguiendo la regla establecida de "por más, la cantidad de RAM de 2 Gb de RAM por encima de 2 Gb" daría un intercambio de 1 Gb por 3 Gb de RAM (3-2 = 1), no los 5 Gb.
David Spillett el
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.