Mémoire Apache à charge élevée VIRT vs RES

8

J'ai un serveur Debian 5, qui reçoit beaucoup de trafic. À l'heure actuelle, le serveur dispose de 4 Go de RAM et pas de mémoire d'échange. Je vois en haut que les processus Apache consomment environ 180 Mo de mémoire virtuelle (VIRT) chacun et 16 Mo de RAM réelle (RES). Alors, combien de threads Apache puis-je avoir en même temps? Environ 4 Go / 180 Mo = 22 ou 4 Go / 16 Mo = 256?

pako
la source

Réponses:

10

La taille de la mémoire virtuelle n'est pas aussi importante que votre ensemble résident. La mémoire virtuelle va inclure des éléments qui sont mappés dans comme les bibliothèques partagées et ainsi de suite (qui ne résident qu'une seule fois dans la RAM physique). RSS vous indique ce qui est réellement dans la mémoire, où Virt. vous indique la quantité d'espace d'adressage virtuel disponible qui a été avalée.

Votre deuxième calcul va être plus proche, bien qu'il soit assez faible. Un serveur avec 4 Go de RAM peut exécuter bien plus de 256 processus Apache. En fonction de vos modèles de trafic et des limitations d'attente d'E / S, l'exécution de plus de 256 peut être une bonne idée, car un bon nombre de ces processus peuvent simplement attendre que le noyau pellette des données d'un périphérique à l'autre. Tenez également compte de choses comme COW et du fait que tout pointe vers le même binaire «httpd», et vous obtenez plus d'efficacité.

Maintenant, allez reconstruire votre système avec un bon 2 Go d'espace de swap. L'échange n'agit plus seulement comme une «mémoire lente».

Comme avertissement, cela fait longtemps que je ne me suis pas soucié des spécificités de la gestion de la mémoire Linux, et peut-être un peu déformé par mes faits, mais l'essentiel est solide!

McJeff
la source
pourquoi il peut exécuter bien plus de 256 processus apache? j'ai des applications que 8 Go peuvent fonctionner autour de 8 seulement.
gcb
-1. "Un serveur avec 4 Go de RAM peut exécuter bien plus de 256 processus Apache" avec ses 16 Mo par processus, cela entraînera un échange, ce qui est un péché cardinal selon tous les guides de performance que j'ai lus à ce sujet.
chèvre du
Que se passe-t-il si vous exécutez un tas jvm de 4 Go (avec un nombre illimité de threads) sur un système avec 16 Go de RAM disponible au total et freeque la mémoire entière est pleine? 0 ou quelques 100 Mo de mémoire libre? Quel est le bon rapport mémoire utilisée / libre pour un "container" jvm ??
niken
1

Cette valeur est principalement due à l'expérimentation de la charge actuelle de votre serveur.

essayez de collecter des données avec 'apache top'. Apportez quelques modifications de configuration et réessayez. Comme je ne connais pas votre cas d'utilisation particulier, il est difficile de trouver des chiffres concrets.

Si vous souhaitez une consommation de mémoire prévisible pour votre serveur Web, veuillez consulter http://wiki.nginx.org/Main

Cela résout certains problèmes d'évolutivité de manière très cool.

Ce n'est pas bon pour chaque cas d'utilisation, mais pensez-y certainement.

Vous pouvez le déployer pour réduire la charge sur votre instance apache. Il est adapté pour servir du contenu statique et du cache dans une configuration de proxy inverse, ainsi que d'autres scénarios de charge élevée.

Donnez-lui un tourbillon, c'est gratuit :-)

The Unix Janitor
la source