Apache VIRT per carichi pesanti e memoria RES


8

Ho un server Debian 5, che riceve molto traffico. In questo momento il server ha 4 GB di RAM e nessuna memoria di scambio. Vedo in cima che i processi Apache consumano circa 180 MB di memoria virtuale (VIRT) ciascuno e 16 MB di RAM reale (RES). Quindi, quanti thread Apache posso avere in esecuzione contemporaneamente? Circa 4 GB / 180 MB = 22 o 4 GB / 16 MB = 256?

Risposte:


10

La dimensione della memoria virtuale non è importante quanto il tuo set di residenti. La memoria virtuale includerà cose che sono mappate come librerie condivise e quant'altro (che sarà residente nella RAM fisica una sola volta). RSS ti dice cosa c'è realmente in memoria, dove come Virt. indica la quantità di spazio degli indirizzi virtuali disponibile che è stata ingerita.

Il tuo secondo calcolo sarà più vicino, anche se è piuttosto basso. Un server con 4 GB di RAM può eseguire molto più di 256 processi Apache. A seconda dei modelli di traffico e delle limitazioni di attesa di I / O, l'esecuzione di oltre 256 potrebbe essere una buona idea in quanto un buon numero di tali processi potrebbe semplicemente rimanere in attesa che il kernel trasferisca i dati da un dispositivo all'altro. Tenete conto anche di cose come COW e del fatto che tutto punta allo stesso binario "httpd" e ottenete più efficienze.

Ora vai e ricostruisci quel tuo sistema con ben 2 GB di spazio di swap. Swap non funziona più solo come "memoria lenta".

Come disclaimer, è passato molto tempo da quando mi sono preoccupato delle specifiche della gestione della memoria di Linux e potrei essere un po 'fuori dai miei fatti, ma l'essenza è solida!


perché può eseguire molto più di 256 processi apache? ho applicazioni che 8Gb possono eseguire solo 8.
gcb,

-1. "Un server con 4 GB di RAM può eseguire molto più di 256 processi Apache" con i suoi 16 MB per processo, questo causerà lo scambio, che è peccato cardinale secondo tutte le guide alle prestazioni che ho letto su questo argomento.
capra,

Cosa succede se si esegue heap jvm da 4 GB (con thread illimitati) su un sistema con un totale di RAM disponibile da 16 GB e si freesegnala che l'intera memoria è piena? 0 o qualche memoria libera da 100 MB? Qual è un buon rapporto tra memoria utilizzata / libera per un "contenitore" jvm ??
niken,

1

Questo valore è principalmente dovuto alla sperimentazione del carico del server corrente.

prova a raccogliere alcuni dati con "apache top". Apporta alcune modifiche alla configurazione e riprova. Dato che non conosco il tuo caso d'uso particolare, è difficile trovare delle figure concrete.

Se si desidera un consumo di memoria prevedibile per il proprio server Web, consultare http://wiki.nginx.org/Main

Risolve alcuni problemi di scalabilità in un modo molto interessante.

Non è giusto per ogni caso d'uso, ma sicuramente lo considera.

Puoi distribuirlo per ridurre il carico sull'istanza di apache. È adatto per servire contenuto statico e cache in una configurazione proxy inversa, nonché altri scenari di carico elevato.

Fai un giro, è gratis :-)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.