Question Valeurs optimales pour les directives ServerLimit, MaxClients, MaxRequestsPerChild


Je suis en train de gérer un site riche en trafic avec un contenu dynamique, principalement généré par les utilisateurs.

Le serveur est dédié et compte au total 4 processeurs X3210 à 2,13 GHz Intel (R) Xeon (R). J'ai besoin de connaître les valeurs optimales pour les directives apache de ServerLimit et MaxClients, étant donné que le serveur dispose de 4 Go de RAM et que la base de données MySQL s'exécute sur un serveur séparé. Le panneau est DirectAdmin avec CentOS.

Voici mes directives actuelles, mais aux heures de pointe avec plus de 5 000 utilisateurs, un retard important est constaté - et ce n’est pas entièrement la faute de MySQL, car les pages semblent être générées rapidement (j’ai implémenté un compteur de temps de génération de pages), mais il y a une longue délai de connexion jusqu'à ce que la page commence à répondre et soit envoyée au navigateur.

<IfModule prefork.c>
    StartServers     800
    MinSpareServers   20
    MaxSpareServers   60
    ServerLimit      900
    MaxClients       900
    MaxRequestsPerChild  2000
</IfModule>
Timeout 90
KeepAlive On
KeepAliveTimeout 5

Je devrais mentionner que, en surveillant le serveur à l'aide de la commande top, l'utilisation du processeur ne dépasse jamais 20% à 30% de l'heure de pointe. Le serveur MySQL a également une utilisation de 30 à 50% à ce moment-là et je travaille constamment à la résolution des requêtes lentes, mais le problème est différent. Je sais que ce n'est pas un goulot d'étranglement dans la base de données, car le chargement des pages statiques est également long aux heures de pointe.

Tous les conseils pour optimiser ces valeurs seront grandement appréciés, merci.


27
2017-08-24 19:12


origine




Réponses:


Votre MaxClients est trop élevé. Quelle est la taille actuelle de votre processus apache? Multipliez ce chiffre par 900. Est-ce supérieur à 4 Go? Si tel est le cas, la machine est susceptible de passer en échange. Je commence généralement par MaxClients = 2x vCPU dans la boîte (grep -c processeur / proc / cpuinfo). Ce qui dans ce cas serait d'environ 8. Ensuite, assurez-vous que la taille du processus MaxClients x apache n'est pas supérieure à 4 Go.

Vous pouvez configurer vos clients MaxClients à partir de là, en fonction du type de connexion de vos clients. (Les utilisateurs d'accès à distance doivent être traités à la cuillère, etc.) Mais assurez-vous de ne jamais vous mettre dans une situation d'échange.

Définissez ensuite vos serveurs Min, Max et Start sur MaxClients. Il n'est pas vraiment nécessaire de les différencier dans un environnement de serveur dédié.

Faites ensuite des tests avec ab (notes d'oie).


21
2017-08-24 20:41



Pour une raison quelconque, il semble que j'ai mal déterminé la taille du processus ... Je vois maintenant dans la commande supérieure que les processus Apache RESIDENT SIZE vont de 10 à 15 Mo. J'ai lu quelque part que, puisque les bibliothèques partagées sont incluses dans ce nombre, la taille "réelle" correspond à la moitié de cette taille. Considérant cela, je devrais calculer que je peux accueillir 570 processus de 7 Mo de taille chacun, pensez-vous que cela est correct? - andreszs
Je vous suggère d'utiliser 15 Mo pour les calculs, puis de commencer à vérifier les mesures: # processus http vs utilisation de la mémoire. Cela vous donnera une meilleure idée du nombre de MaxClients. - hdanniel
Je l'ai abaissé à 400 et même avant l'heure de pointe, le résultat a eu l'effet inverse de celui souhaité: toute valeur inférieure à celle d'origine crée des délais d'attente et des délais importants. En fait, je l'ai augmenté à 1500 clients et l'utilisation de la mémoire est maintenant de 3 Go alors que l'utilisation moyenne du processeur est de 8%. Bien sûr, le serveur SQL est maintenant surchargé et je devrai y travailler. - andreszs
Voici ma commande htop maintenant, 1500 processus apache et près de 100 processus système. Ceci avec 75% de l'utilisation de la RAM. a.imagehost.org/0011/htop.png  Devez-vous reconsidérer votre formule? ;) - andreszs
C'est pourquoi vous devez effectuer des tests dans votre propre environnement. Nous avons des accélérateurs http en face de nos Apache, de sorte qu'ils ne sont pas des utilisateurs mobiles spoonfeeding. Votre application semble également être très légère. Si vous avez déplacé la charge vers votre base de données, cela signifie que de plus en plus de ces processus apache servent des données plutôt que de rester assis et d'attendre une connexion mysql. Ce qui m'amène ensuite à demander combien de connexions autorisez-vous à votre base de données? Ce nombre dépasse-t-il votre MaxClients? Avez-vous 5 000 connexions simultanées? Si oui, vous voudrez peut-être examiner quelque chose comme perlbal devant. - toppledwagon


Vous devez obtenir la taille moyenne de votre processus Apache. Avec ce nombre et la taille totale de votre RAM, vous pouvez calculer la directive MaxClients. Rappelez-vous ceci: "Un serveur web ne devrait jamais avoir à échanger" (Apache Performance Tuning)

Surveiller avec top ou htop est correct, mais vous avez besoin d’une meilleure vue de toutes les statistiques de vos serveurs (unité centrale de traitement, RAM, entrée / sortie disque, requêtes Apache, requêtes lentes mysql, etc ...) avec un outil de surveillance comme ganglia ou munin. trouver les goulots d'étranglement possibles.


4
2017-08-24 20:56



Pour le moment, je n'ai que les commandes top et htop, et je n'arrive pas à comprendre toutes ses informations. C'est l'activité hier aux heures de pointe, il semble qu'il n'y ait pas d'échange; Dites-moi si je me trompe: Tâches: 1043 au total, 2 en cours, 1041 en sommeil, 0 arrêtées, 0 Cpu (s) zombies: 13.8% US, 1.8% Sy, 0.0% ni, 82.1% id, 0.8% wa, 0,0% salut, 1,5% si, 0,0% st Mem: 4138360k total, 3961276k utilisé, 177084k libre, 75016k tampons Échange: 2031608k total, 1484k utilisé, 2030124k gratuit, 1836600k en cache - andreszs
Oui, votre serveur n’échange pas. Je préfère les mesures réelles, mais si vous le souhaitez, vous pouvez utiliser un outil de contrainte tel que ab ou httperf pour vérifier les capacités de votre serveur. Pour les tests, prenez soin de MaxClients et commencez avec un nombre peu élevé (basé sur l'hypothèse de 15 Mo). - hdanniel


Je recommande de jouer avec l'outil de référence (ab) d'apache. Vous pouvez jouer avec les valeurs pour les faire correspondre à votre flux de trafic et voir quel type de réponses vous obtenez en termes de temps de chargement moyen, etc. À ce stade, vous pouvez jouer avec les paramètres dont vous parlez pour essayer de les optimiser. Avec ab, vous devriez pouvoir maîtriser les performances optimales de chaque réglage de performance.

Il ne serait pas vraiment prudent pour moi de parler de vos paramètres. Toutefois, vous devez également prendre en compte votre RAM car il semble que vous consommez beaucoup de RAM avec ces paramètres. Bien que ce ne soit que spéculation sans aucune donnée. htop vous donne une bonne lecture visuelle de vos ressources.

De plus, votre charge moyenne pourrait en dire long. Je doute que votre utilisation soit bien supérieure au nombre total de cœurs de 20 à 30% de l’unité centrale, mais c’est un autre indicateur de la puissance de votre serveur.


3
2017-08-24 19:35



Le problème est que je n'ai pas suffisamment d'expérience en administration de serveur, alors commencez à vous amuser avec les paramètres et surveillez les résultats. Je n'ai jamais utilisé l'outil ab pour être honnête. De plus, pour changer les valeurs, il faut redémarrer HTTDP, ce qui cause des inconvénients pour mes utilisateurs, je préfère donc éviter cela. Imaginez que vous envoyez un message à un autre utilisateur et que vous ayez cliqué sur "Envoyer", vous obtenez un problème de connexion au serveur. Sur l'utilisation du processeur, voir les informations de mon commentaire précédent: il ne doit pas dépasser 15% aux heures de pointe. Je pense que c'est tout à fait acceptable étant donné que j'avais 6000 utilisateurs en ligne hier. - andreszs
Eh bien, je ne voudrais certainement pas que vous fassiez cela dans un environnement de production. Je recommande de le faire à votre heure de trafic la plus basse si un autre serveur (avec un matériel très similaire, sinon identique), à ​​tester. ab est assez facile à utiliser, mais je pense vraiment que toppledwagon a donné de bonnes instructions pour calculer vos clients MaxClients. Une fois que vous arrêtez d'utiliser l'espace de swap, vous constaterez une nette amélioration. vérifier httpd.apache.org/docs/2.0/programs/ab.html et cyberciti.biz/tips/… pour AB - goose