Apache VIRT de carga pesada vs memoria RES

8

Tengo un servidor Debian 5, que recibe mucho tráfico. En este momento, el servidor tiene 4 GB de RAM y no tiene memoria de intercambio. Veo en la parte superior que los procesos de Apache consumen aproximadamente 180 MB de memoria virtual (VIRT) cada uno y 16 MB de RAM real (RES). Entonces, ¿cuántos hilos de Apache puedo ejecutar al mismo tiempo? ¿Aproximadamente 4 GB / 180 MB = 22 o 4 GB / 16 MB = 256?

pako
fuente

Respuestas:

10

El tamaño de la memoria virtual no es tan importante como su conjunto residente. La memoria virtual incluirá cosas que están mapeadas, como bibliotecas compartidas y otras cosas (que solo residirán en la RAM física una vez). RSS te dice qué hay realmente en la memoria, donde Virt. le indica cuánto espacio de direcciones virtual disponible se ha tragado.

Su segundo cálculo estará más cerca, aunque es bastante bajo. Un servidor con 4 GB de RAM puede ejecutar mucho más de 256 procesos de Apache. Dependiendo de sus patrones de tráfico y las limitaciones de espera de E / S, puede ser una buena idea ejecutar más de 256, ya que una buena cantidad de esos procesos puede estar esperando a que el núcleo mezcle los datos de un dispositivo a otro. También tenga en cuenta cosas como COW y el hecho de que todo apunta al mismo binario 'httpd', y obtendrá más eficiencia.

Ahora, ve y reconstruye ese sistema tuyo con un buen espacio de intercambio de 2GB. El intercambio ya no solo actúa como "memoria lenta".

Como descargo de responsabilidad, ha pasado mucho tiempo desde que me han preocupado los detalles de la administración de memoria de Linux, y podría estar un poco fuera de mi alcance, ¡pero la esencia es sólida!

McJeff
fuente
¿Por qué puede ejecutar mucho más de 256 procesos de Apache? Tengo aplicaciones que 8 Gb solo pueden ejecutar alrededor de 8.
gcb
-1. "Un servidor con 4 GB de RAM puede ejecutar mucho más de 256 procesos de Apache" con sus 16 MB por proceso, esto provocará un intercambio, lo cual es un pecado capital de acuerdo con todas las guías de rendimiento que he leído sobre este tema.
cabra
¿Qué sucede si ejecuta un almacenamiento dinámico de 4 gb jvm (con subprocesos ilimitados) en un sistema con un total de 16 Gb de RAM disponible e freeinforma que toda la memoria está llena? 0 o unos 100 MB de memoria libre? ¿Cuál es una buena relación de memoria usada / libre para un "contenedor" jvm?
niken
1

Este valor se debe principalmente a la experimentación con la carga actual de su servidor.

intente recopilar algunos datos con 'apache top'. Realice algunos cambios de configuración e intente nuevamente. Como no conozco su caso de uso particular, es difícil encontrar algunas figuras concretas.

Si desea un consumo de memoria predecible para su servidor web, visite http://wiki.nginx.org/Main

Resuelve algunos problemas de escalabilidad de una manera genial.

No es adecuado para todos los casos de uso, pero ciertamente considérelo.

Puede implementarlo para reducir la carga en su instancia de apache. Es adecuado para servir contenido estático y de caché en una configuración de proxy inverso, así como otros escenarios de alta carga.

Dale una vuelta, es gratis :-)

El conserje de Unix
fuente