web-dev-qa-db-fra.com

Valeurs optimales pour les directives ServerLimit, MaxClients, MaxRequestsPerChild

J'exécute un site très fréquenté avec beaucoup de contenu dynamique, principalement généré par les utilisateurs.

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

Voici mes directives actuelles, mais pendant les heures de pointe avec plus de 5 000 utilisateurs, un retard important est remarqué - 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 page), mais il y a un long 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 dois mentionner que la surveillance du serveur à l'aide de la commande supérieure, l'utilisation du processeur ne dépasse jamais 20% ~ 30% aux heures de pointe. Le serveur MySQL a également une utilisation de 30 à 50% à ce moment-là, et je travaille constamment sur la correction des requêtes lentes, mais c'est un problème différent. Je sais que ce n'est pas un goulot d'étranglement DB, car les pages statiques prennent également beaucoup de temps à se charger aux heures de pointe.

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

29
andreszs

Votre MaxClients est beaucoup trop élevé. Quelle est la taille actuelle de votre processus Apache? Multipliez cela par 900. Est-ce supérieur à 4 Go? Si tel est le cas, la machine est susceptible de basculer. Je commence généralement avec MaxClients = 2x vCPUs dans la boîte (grep -c processor/proc/cpuinfo). Dans ce cas, ce serait environ 8. Assurez-vous que la taille du processus MaxClients x Apache ne dépasse pas 4 Go.

Vous pouvez augmenter vos MaxClients à partir de là, selon le type de connexion de vos clients. (Les utilisateurs d'accès à distance doivent être alimenté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é.

Ensuite, faites quelques tests avec ab (comme des notes d'oie.)

24
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 )

La surveillance avec top ou htop est ok mais vous avez besoin d'une meilleure vue de toutes les statistiques de vos serveurs (cpu, ram, E/S disque, requêtes Apache, requêtes lentes mysql, etc ...) avec un outil de surveillance comme ganglia ou munin pour trouver d'éventuels goulots d'étranglement.

5
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 ce qui concerne le temps de chargement moyen, etc. À ce stade, vous pouvez jouer avec les paramètres dont vous parlez pour essayer de les optimiser. Vous devriez être en mesure avec ab d'obtenir une idée des performances optimales pour chaque performance Tweak.

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

Votre moyenne de charge pourrait également en dire long. Je doute que votre utilisation soit beaucoup plus élevée que votre quantité totale de cœurs de 20 à 30% de processeur, mais c'est un autre indicateur de la puissance de votre serveur.

4
goose