¿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?
11
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.
dd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file
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.
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.
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:
¿Cuál es la mejor manera de ajustar mi memoria para mi aplicación?
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
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.
fuente
Del documento "Oracle 10g Server en Red Hat® Enterprise Linux® 5 Recomendaciones de implementación".
Entonces, para 16 GB no debe tener más de 4 GB de intercambio.
PD. También vale la pena señalar que invocar
oom
es casi siempre mejor que el proceso de intercambio inutilizable que usa todo el ancho de banda de E / S.fuente
Las recomendaciones actuales de CentOS Swap usan la fórmula:
Entonces, para 16G, la cantidad de intercambio debe ser 18G.
Ver http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-swapspace.html
fuente
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)
fuente
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
fuente