[article] Bien configurer apache
20 messages • Page 1 sur 2 • 1, 2
Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics
[article] Bien configurer apache
Pour répondre aux posts de ce type http://www.webrankinfo.com/forums/viewtopic_63380.htm ou de celui-ci http://www.webrankinfo.com/forums/viewt ... 512#609512 et bien d’autres, j’ouvre ce fil de discussion afin d’apporter une réponse globale. Excusez-moi pour la longueur de ce post, mais j'avais pas d'autre choix! (je vias finir par faire un blog moi!
)
INTRODUCTION A LA CONFIGURATION D'APACHE
Une des raisons du succès d’apache est, entre autres, sa souplesse d’utilisation. Malheureusement, la documentations Apache est plutôt sibylline en matière d’optimisation et qui plus est, en anglais ce qui pousse pas mal de webmaster à jouer aux apprentis sorciers avec le paramétrage d’apache.
J'ai potassé les docs apaches ce week-end et rcherché quelques notes dans mes cahiers pour essayer de vous aider à y voir plus clair en détaillant les principaux paramètres de configuration d’apache en matière de performances (je ne parle que des paramètres commun à tous les serveurs web indépendamment de tel ou tel module apache). Ne vous attendez cependant pas à ce que je vous donne une configuration type car cela n’existe pas !
La configuration correcte des paramètres MinSpareServers, MaxSpareServers, StartServers, MaxClients, et MaxRequestsPerChild est primordiale pour fixer les performance d’apache. Il n’y a aucune valeur universelle pour ces valeurs qui dépendent uniquement des ressources et de l'utilisation de votre serveur.
La ressource la plus importante car la plus limitative de votre serveur est la mémoire. C’est la quantité de mémoire de votre serveur qui pose une limite physique au nombre de connections simultanées. Le paramètre permettant de fixer le nombre maximum de clients que apache peut servir en même temps est MaxClients.
MaxClients : Pour déterminer la valeur de MaxClient il faut tout d’abord estimer la quantité de mémoire que vous souhaitez allouer à apache. Un bon moyen d’estimer cette quantité de mémoire et d’arrêter apache et de faire un "ps aux". On fait alors la somme de la colonne RSS, que l’on soustrait à la quantité de mémoire du serveur. Par sécurité, on diminue la valeur obtenue de 10%.
Par exemple, nous obtenons 720Mo.
Maintenant nous allons déterminer la taille d’un processus apache. Apache étant en fonctionnement, avec la commande "ps aux | grep apache" on fait la moyenne de la colonne RSS. (Selon le serveur, apache peut s’exécuter sous différents utilisateurs : http, apache, apache2, www-data etc…) Nous obtenons 14Mo.
La division 720/14 nous donne 51. C’est la valeur de notre MaxClients pour notre serveur.
Si vous mettez une valeur inférieure, vous sous utilisez vos ressources, une valeur supérieure risque d’obliger votre serveur à swapper lorsque les 51 clients seront atteint dans le pire des cas ou dans le meilleur des cas, les clients supplémentaires seront mis en attente ce qui ralentira l'accés à votre serveur.
Si vous trouvez que cette valeur est insuffisante par rapport à vos besoins, il faut travailler la taille de vos processus apache. Par exemple, un processus apache sans php pèse environ 3 à 4 Mo. Avec php il peut atteindre 20 Mo ! Par défaut, dans php.ini, vous allouez 8Mo à chaque script. Il peut être intéressant de diminuer cette valeur en faisant quelques tests. Par exemple, si vous gagnez 2Mo cela se traduira par une valeur de 720/12=60 pour MaxClients.
Attention ! au dela de 256, il faut recompiler apache sinon cette valeur ne sera pas prise en compte et restera limité a 256.
Comment savoir si on a dépassé la valeur allouée à MaxClients ? En regardant dans le fichier des log d’erreur. Un dépassement de [b]MaxClients [/b]est signale par une ligne de ce type :
MaxRequestsPerChild : ce paramètre fixe la limite du nombre de demandes qu'un processus apache satisfera en générant un processus fils avant de mourir. Il faut savoir qu’un processus fils consomme plus de mémoire après chaque demande.
Si MaxRequestsPerChild vaut 0, alors le processus ne meurt jamais, sa taille augmente au fur est en mesure des demandes et vous vous retrouvez avec la mémoire du serveur saturée et apache qui ne réponds pratiquement plus.
Si MaxRequestsPerChild vaut 1, alors le processus meurt après chaque service. Le nouveau processus crée pour repondre au client utilise un minimum de mémoire mais en contrepartie, sa génération est plus lente.
Le choix de cette valeur est un compromis entre l’utilisation mémoire et la vitesse d’exécution. Moins votre contenu est dynamique, plus haute peut être la valeur de ce paramètre. Si la valeur est trop faible, vous consommerais beaucoup de CPU pour créer des processus, si elle est trop élevée vous verrez augmenter la taille de vos processus apache. Gardez à l’esprit que plus vos processus apache sont lourds plus vous serez emmené à réduire le MaxClients.
Pour déterminer la valeur la plus appropriée il vous faudra faire des tests de valeurs entre 50 et 1000 selon votre utilisation du serveur. Lors d’une commande "ps aux –sort :rss" observez la durée de vie de vos processus apache et considérez en regard la taille des processus, cela vous donnera des pistes.
MinSpareServers, MaxSpareServers et StartServers sont seulement importants pour déterminer les temps de réponses vis-à-vis des clients.
StartServers défini le nombre de processus crées par apache lors de son lancement. Sur certaine config, apache n’est « jamais » redémarré ce qui rend ce paramètre insignifiant. Si apache est redémarré fréquemment, cette valeur doit être suffisante pour servir le nombre de clients au moment du lancement d’apache.
MinSpareServers, MaxSpareServers fixe les limites basse et haute en nombre de processus dormant (sleeping) qu’apache doit maintenir. Si ce nombre de processus dépasse MaxSpareServers, les processus en trop seront tués, si ce nombre est inférieur à MinSpareServers, les processus manquants seront crées.
La création de processus étant gourmande en mémoire, ne réglez pas ces valeurs trop bas. Mais la encore, votre serveur est unique et il vous faudra effectuer des test. Un bon moyen de trouver les bonnes valeurs est de régler ces paramètres de façon à ce qu’apache n’ai pas à créer plus de 4 processus enfant par seconde. Vous allez me dire mais comment on le sait !
C’est simple, si apache crée plus de 4 processus enfant par seconde vous aurez un message dans les logs d’erreur.
Mais ne vous focalisez pas sur ces deux valeurs qui ne sont pas critiques. MinSspareServers doit être assez haut pour absorber un pic de requêtes, MaxSpareServers doit être assez haut pour couvrir les fluctuations normales du nombre de requêtes. Leur limite étant bien sur… MaxClients.
Il nous reste deux paramètre de configuration concernant le gestion des processus apache.
KeepAlive permet d’autoriser l’envoie de requêtes multiples sur la même connexion TCP. Cela peut être utile si vos pages HTML contiennent beaucoup d’images car si KeepAlive est positionné à Off, une connexion TCP séparée est crée pour chacune des images. Là encore, le type d’utilisation du serveur déterminera votre choix. Mais gardez à l’esprit que les images communes à plusieurs pages web consultés sont mise en cache par le navigateur de l’utilisateur.
KeepAliveTimeout détermine la durée d’attente de la prochaine requête. Si cette valeur est trop élevée, vos processus enfant sont immobilisés en état d’attente au lieu de servir les requêtes. Personnellement je conseille entre 2 et 5 secondes pour cette valeur.
Voilà, vous êtes maintenant prêts à configurer efficacement votre serveur apache.
INTRODUCTION A LA CONFIGURATION D'APACHE
Une des raisons du succès d’apache est, entre autres, sa souplesse d’utilisation. Malheureusement, la documentations Apache est plutôt sibylline en matière d’optimisation et qui plus est, en anglais ce qui pousse pas mal de webmaster à jouer aux apprentis sorciers avec le paramétrage d’apache.
J'ai potassé les docs apaches ce week-end et rcherché quelques notes dans mes cahiers pour essayer de vous aider à y voir plus clair en détaillant les principaux paramètres de configuration d’apache en matière de performances (je ne parle que des paramètres commun à tous les serveurs web indépendamment de tel ou tel module apache). Ne vous attendez cependant pas à ce que je vous donne une configuration type car cela n’existe pas !
La configuration correcte des paramètres MinSpareServers, MaxSpareServers, StartServers, MaxClients, et MaxRequestsPerChild est primordiale pour fixer les performance d’apache. Il n’y a aucune valeur universelle pour ces valeurs qui dépendent uniquement des ressources et de l'utilisation de votre serveur.
La ressource la plus importante car la plus limitative de votre serveur est la mémoire. C’est la quantité de mémoire de votre serveur qui pose une limite physique au nombre de connections simultanées. Le paramètre permettant de fixer le nombre maximum de clients que apache peut servir en même temps est MaxClients.
MaxClients : Pour déterminer la valeur de MaxClient il faut tout d’abord estimer la quantité de mémoire que vous souhaitez allouer à apache. Un bon moyen d’estimer cette quantité de mémoire et d’arrêter apache et de faire un "ps aux". On fait alors la somme de la colonne RSS, que l’on soustrait à la quantité de mémoire du serveur. Par sécurité, on diminue la valeur obtenue de 10%.
Par exemple, nous obtenons 720Mo.
Maintenant nous allons déterminer la taille d’un processus apache. Apache étant en fonctionnement, avec la commande "ps aux | grep apache" on fait la moyenne de la colonne RSS. (Selon le serveur, apache peut s’exécuter sous différents utilisateurs : http, apache, apache2, www-data etc…) Nous obtenons 14Mo.
La division 720/14 nous donne 51. C’est la valeur de notre MaxClients pour notre serveur.
Si vous mettez une valeur inférieure, vous sous utilisez vos ressources, une valeur supérieure risque d’obliger votre serveur à swapper lorsque les 51 clients seront atteint dans le pire des cas ou dans le meilleur des cas, les clients supplémentaires seront mis en attente ce qui ralentira l'accés à votre serveur.
Si vous trouvez que cette valeur est insuffisante par rapport à vos besoins, il faut travailler la taille de vos processus apache. Par exemple, un processus apache sans php pèse environ 3 à 4 Mo. Avec php il peut atteindre 20 Mo ! Par défaut, dans php.ini, vous allouez 8Mo à chaque script. Il peut être intéressant de diminuer cette valeur en faisant quelques tests. Par exemple, si vous gagnez 2Mo cela se traduira par une valeur de 720/12=60 pour MaxClients.
Attention ! au dela de 256, il faut recompiler apache sinon cette valeur ne sera pas prise en compte et restera limité a 256.
Comment savoir si on a dépassé la valeur allouée à MaxClients ? En regardant dans le fichier des log d’erreur. Un dépassement de [b]MaxClients [/b]est signale par une ligne de ce type :
- Code: Tout sélectionner
[error] server reached MaxClients settings, consider raising the MaxClients setting.
MaxRequestsPerChild : ce paramètre fixe la limite du nombre de demandes qu'un processus apache satisfera en générant un processus fils avant de mourir. Il faut savoir qu’un processus fils consomme plus de mémoire après chaque demande.
Si MaxRequestsPerChild vaut 0, alors le processus ne meurt jamais, sa taille augmente au fur est en mesure des demandes et vous vous retrouvez avec la mémoire du serveur saturée et apache qui ne réponds pratiquement plus.
Si MaxRequestsPerChild vaut 1, alors le processus meurt après chaque service. Le nouveau processus crée pour repondre au client utilise un minimum de mémoire mais en contrepartie, sa génération est plus lente.
Le choix de cette valeur est un compromis entre l’utilisation mémoire et la vitesse d’exécution. Moins votre contenu est dynamique, plus haute peut être la valeur de ce paramètre. Si la valeur est trop faible, vous consommerais beaucoup de CPU pour créer des processus, si elle est trop élevée vous verrez augmenter la taille de vos processus apache. Gardez à l’esprit que plus vos processus apache sont lourds plus vous serez emmené à réduire le MaxClients.
Pour déterminer la valeur la plus appropriée il vous faudra faire des tests de valeurs entre 50 et 1000 selon votre utilisation du serveur. Lors d’une commande "ps aux –sort :rss" observez la durée de vie de vos processus apache et considérez en regard la taille des processus, cela vous donnera des pistes.
MinSpareServers, MaxSpareServers et StartServers sont seulement importants pour déterminer les temps de réponses vis-à-vis des clients.
StartServers défini le nombre de processus crées par apache lors de son lancement. Sur certaine config, apache n’est « jamais » redémarré ce qui rend ce paramètre insignifiant. Si apache est redémarré fréquemment, cette valeur doit être suffisante pour servir le nombre de clients au moment du lancement d’apache.
MinSpareServers, MaxSpareServers fixe les limites basse et haute en nombre de processus dormant (sleeping) qu’apache doit maintenir. Si ce nombre de processus dépasse MaxSpareServers, les processus en trop seront tués, si ce nombre est inférieur à MinSpareServers, les processus manquants seront crées.
La création de processus étant gourmande en mémoire, ne réglez pas ces valeurs trop bas. Mais la encore, votre serveur est unique et il vous faudra effectuer des test. Un bon moyen de trouver les bonnes valeurs est de régler ces paramètres de façon à ce qu’apache n’ai pas à créer plus de 4 processus enfant par seconde. Vous allez me dire mais comment on le sait !
C’est simple, si apache crée plus de 4 processus enfant par seconde vous aurez un message dans les logs d’erreur.
Mais ne vous focalisez pas sur ces deux valeurs qui ne sont pas critiques. MinSspareServers doit être assez haut pour absorber un pic de requêtes, MaxSpareServers doit être assez haut pour couvrir les fluctuations normales du nombre de requêtes. Leur limite étant bien sur… MaxClients.
Il nous reste deux paramètre de configuration concernant le gestion des processus apache.
KeepAlive permet d’autoriser l’envoie de requêtes multiples sur la même connexion TCP. Cela peut être utile si vos pages HTML contiennent beaucoup d’images car si KeepAlive est positionné à Off, une connexion TCP séparée est crée pour chacune des images. Là encore, le type d’utilisation du serveur déterminera votre choix. Mais gardez à l’esprit que les images communes à plusieurs pages web consultés sont mise en cache par le navigateur de l’utilisateur.
KeepAliveTimeout détermine la durée d’attente de la prochaine requête. Si cette valeur est trop élevée, vos processus enfant sont immobilisés en état d’attente au lieu de servir les requêtes. Personnellement je conseille entre 2 et 5 secondes pour cette valeur.
Voilà, vous êtes maintenant prêts à configurer efficacement votre serveur apache.
Sympa cette doc
J'en profite pour indiquer qu'il faut faire attention au remplissage des partitions disque car cela peut faire planter les services (Apache, Mysql...) à cause des logs par exemple
Pour apache2, il n'est pas nécessaire de recompiler pour dépasser 256 en MaxClients, il suffit d'ajouter ServerLimit 500 par exemple. Ca permet de placer MaxClients à 500.
J'en profite pour indiquer qu'il faut faire attention au remplissage des partitions disque car cela peut faire planter les services (Apache, Mysql...) à cause des logs par exemple
Pour apache2, il n'est pas nécessaire de recompiler pour dépasser 256 en MaxClients, il suffit d'ajouter ServerLimit 500 par exemple. Ca permet de placer MaxClients à 500.
J'en profite pour indiquer qu'il faut faire attention au remplissage des partitions disque car cela peut faire planter les services (Apache, Mysql...) à cause des logs par exemple
Pour remédier à cela il y a logrotate qui permet de séparer les logs à intervalle régulier (tout en lançant ton logiciel de stats favori pour les logs du serveur web)
Oui, mais quand tu fais beaucoup de visites par jour, les log d'accès (placés par défaut dans /var/log) sont extrêmement lourds, et ceci avant la rotation des logs (à moins de paramétrer une rotation des logs toutes les heures
)
Faut vraiment faire beaucoup de hits et avoir une partition minuscule...
Au max un hit ça doit représenter quelque chose comme 300 ou 400 octets de log (et encore avec une grande URL et une grande URL referante) pour arriver à 3 Go ça fait plus de 10 000 000 de hits !
Et 3 Go de stockages pour ses logs c vraiment minuscule, je pense que si tu as un site qui fait plus de 10 000 000 hits / jour tu ne laisseras pas tes logs longtemps dans /var/log comme c'est le cas par défaut...
Au max un hit ça doit représenter quelque chose comme 300 ou 400 octets de log (et encore avec une grande URL et une grande URL referante) pour arriver à 3 Go ça fait plus de 10 000 000 de hits !
Et 3 Go de stockages pour ses logs c vraiment minuscule, je pense que si tu as un site qui fait plus de 10 000 000 hits / jour tu ne laisseras pas tes logs longtemps dans /var/log comme c'est le cas par défaut...
Effectivement (et ce n'est pas pour mon site), les logs ont été déplacés dans une autre partition
Mais, je voulais juste apporter l'info car c'est assez sournois comme truc. Quand la partition devient presque pleine, Mysql se bloque et quand on ne sait pas, c'est un peu galère
Mais, je voulais juste apporter l'info car c'est assez sournois comme truc. Quand la partition devient presque pleine, Mysql se bloque et quand on ne sait pas, c'est un peu galère
- [--Eric--]
- WRInaute impliqué

- Messages: 415
- Inscription: Mar Jan 06, 2004 10:48
Merci !!
Quand on fait le ps aux | grep apache c'est laquelle la colonne RSS ?
Quand on fait le ps aux | grep apache c'est laquelle la colonne RSS ?
- Code: Tout sélectionner
# ps aux | grep apache
root 20812 0.0 1.1 48012 5804 ? Ss Nov27 0:02 /usr/sbin/apache2 -k start -DSSL
www-data 9890 0.1 3.4 54772 17676 ? S 07:39 0:07 /usr/sbin/apache2 -k start -DSSL
www-data 10110 0.0 2.7 51068 13788 ? S 07:40 0:04 /usr/sbin/apache2 -k start -DSSL
www-data 12013 0.1 2.2 48980 11328 ? S 07:49 0:10 /usr/sbin/apache2 -k start -DSSL
www-data 12094 0.0 2.9 49980 15216 ? S 07:50 0:03 /usr/sbin/apache2 -k start -DSSL
www-data 12401 0.0 3.4 51096 17776 ? S 07:52 0:06 /usr/sbin/apache2 -k start -DSSL
www-data 13509 0.1 2.9 49880 14996 ? S 07:59 0:07 /usr/sbin/apache2 -k start -DSSL
www-data 14664 0.0 2.0 49112 10476 ? R 08:05 0:03 /usr/sbin/apache2 -k start -DSSL
etc...
[--Eric--] a écrit:Merci !!
Quand on fait le ps aux | grep apache c'est laquelle la colonne RSS ?![]()
- Code: Tout sélectionner
# ps aux | grep apache
root 20812 0.0 1.1 48012 5804 ? Ss Nov27 0:02 /usr/sbin/apache2 -k start -DSSL
www-data 9890 0.1 3.4 54772 17676 ? S 07:39 0:07 /usr/sbin/apache2 -k start -DSSL
www-data 10110 0.0 2.7 51068 13788 ? S 07:40 0:04 /usr/sbin/apache2 -k start -DSSL
www-data 12013 0.1 2.2 48980 11328 ? S 07:49 0:10 /usr/sbin/apache2 -k start -DSSL
www-data 12094 0.0 2.9 49980 15216 ? S 07:50 0:03 /usr/sbin/apache2 -k start -DSSL
www-data 12401 0.0 3.4 51096 17776 ? S 07:52 0:06 /usr/sbin/apache2 -k start -DSSL
www-data 13509 0.1 2.9 49880 14996 ? S 07:59 0:07 /usr/sbin/apache2 -k start -DSSL
www-data 14664 0.0 2.0 49112 10476 ? R 08:05 0:03 /usr/sbin/apache2 -k start -DSSL
etc...
Dans ton exemple, c'est la colonne qui précéde le "?" soit la colonne qui contient les valeurs de 5804 à 10476.
Dans ton exemple, un processus apache peut prendre jusqu'à 17Mo de memoire.
-

titiplanti - WRInaute impliqué

- Messages: 430
- Inscription: Jeu Nov 04, 2004 2:34
Excellent post ! (exactement ce qui me préoccupe en ce moment !)
Re: [article]Bien configurer apache
fandecine a écrit:Mais ne vous focalisez pas sur ces deux valeurs qui ne sont pas critiques. MinSspareServers doit être assez haut pour absorber un pic de requêtes, MaxSpareServers doit être assez haut pour couvrir les fluctuations normales du nombre de requêtes. Leur limite étant bien sur… MaxClients.
Je ne comprends pas la config de ces variables ainsi. Voici l'explication que j'ai toujours eu des spare servers (spare signifiant "de secours"/"de rechange", n'oublions pas)
Supposons une config avec (chiffres bidons, juste pour l'exemple)
StartServers=30
MinSpareServers=5
MaxSpareServers=10
Apache lance 30 processus serveurs.
Si le nb de clients simultanés ne dépasse pas ce 30, alors les spare servers ne seront jamais utilisés (et il y en a 5 de lancés).
Si le nb de clients atteint 33, alors apache "utilise" 3 spare servers qui etaient precedemment lancés et en relance 3 pour maintenir le nb de spare servers a 5.
Le nb de client retombe a 25. Il y a donc 8 spare servers. Le max etant a 10 ils restent en place.
La limite de Min/MaxSpareServers n'est pas MaxClient, mais MaxClient-StartServers.
Car avec StartServers=30 et MaxSpareServers=10, on a MaxClient >= 40.
Avoir StartServers=30 et MaxSpareServers=30 et MaxClient=40 serait idiot car pourquoi avoir 30 spare servers alors qu'on ne peut servir que 40 clients et qu'on a deja 30 serveurs...
Des avis eclairés sur ces paramètres de conf ?
20 messages • Page 1 sur 2 • 1, 2
Formation recommandée sur ce thème :
Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Suite de l'article sur le fichier .htaccess : l'URL rewriting
- Article sur le fichier .htaccess
- GGSearch: Search Tool with Google(TM) Power
- Hébergement de projets open source sur Google Code
- Séminaire URL Rewriting et sites dynamiques
- Google Web Toolkit, pour créer des applications en AJAX
- Configurer les options de passage de Googlebot sur son site
- Configurer des nouveaux moteurs dans Google Analytics
- Comment envoyer un ping à Google Blog Search
- Référencement Flash : guide pratique des méthodes
Consultez la description détaillée des produits ou services de Google suivants : Google Web Toolkit
- Test de lien (type de redirection)
Cet outil vous permet de tester la validité d'un lien pour le référencement. Il vous indique la nature du lien (lien en dur, redirection bien gérée par les moteurs ou redirection mal gérée par les moteurs). - Détection de pages similaires
Cet outil vous permet de calculer la similarité entre 2 pages web. L'algorithme utilisé repose sur l'analyse des occurrences des mots (mais pas sur leur positionnement dans les pages). Google utilise cette notion à certains endroits dans son algorithme, mais de façon bien plus évoluée que ce petit outil... Avoir des pages trop similaires peut entraîner des problèmes d'indexation... Cet outil vous permettra peut-être de résoudre certains problèmes de contenus dupliqués.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités










le forum