[article] Optimiser son serveur dedié part II
17 messages • Page 1 sur 2 • 1, 2
Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics
[article] Optimiser son serveur dedié part II
Voilà bien longtemps que je n'avais pas publié d'article sur l'administration serveur sur WRI. Vu le nombre de MP que je reçois pour des demandes d'aide dans le domaine de l'optimisation de serveur web, je vous livre aujourd'hui des solutions "avancées" en complément de l'article déjà publié http://www.webrankinfo.com/forums/viewtopic_51449.htm.
Posons d'abord le problème : Comment puis-je, avec un serveur LAMP donné, servir plus d'utilisateurs ?
Ceux qui ont lu les articles précédents, ont compris que la limite au nombre de connections simultanées sur un serveur web était donnée par la mémoire du dit serveur. Si on ne peut pas ou on ne souhaite pas augmenter la mémoire du serveur, il faut donc diminuer la taille mémoire requise par un processus apache.
Mais comment faire ? C'est assez simple, il suffit de virer les modules apache inutiles. Que ce soit apache 1 ou 2, seul 3 modules sont nécessaires (et encore!). Il s'agit de mod_dir, mod_mime_et mod_log_config.
Maintenant, listez les modules dont vous avez réellement besoin (mod_rewrite si vous utilisez le rewriting , mod_php si vous utilisez PHP etc)
Maintenant vous pouvez recompiler apache. Voici le résultat d'une commande "ps aux" sur le même serveur avec dans le premier cas une installation d'apache universelle (faite avec apt-get) et dans le deuxième cas, une configuration maison d'apache compilée à partir des sources.
Vous remarquez que le gain mémoire est énorme pour chaque processus apache (colonne RSS). La taille mémoire nécessaire à un processus apache est divisée par 4 , on peut donc multiplier par 4 le nombre de processus apache à mémoire donnée. (Attention, le gain peut varier d'une configuration à l'autre)
Maintenant, on peut aller encore plus loin en se posant la question suivante ? Ai je besoin d'un processus de 7Mo pour servir un fichier gif de 3ko ? Bien sur que non. Voyons ce que donne une commande "ps aux" avec un serveur apache compilé sans PHP :
Un processus apache ne nécessite plus que 1,6Mo de mémoire ! Oui, mais j'ai absolument besoin de PHP.
Pas de problème, nous allons compiler un apache avec PHP que nous ferons écouter sur le port 8080 et un apache sans PHP mais avec mod_proxy que nous ferons écouter sur le port 80 et qui renverra les demande pour des fichiers PHP vers le port 8080.
En supposant que notre serveur ai 1 Go de mem consacrée à apache, nous pouvons:
dans le cas 1 (apache satndard) lancer 35 processus apache (1 Go/30Mo)
dans le cas 2 (apache compilé avec php) lancer 133 processus apache (1 Go/7,5Mo)
dans le cas 3 (2 instances d'apache) lancer 100 apache avec PHP (750Mo/7,5 Mo) plus 156 apache léger (250Mo/1,6Mo) soit 256 processus apache.
Les valeurs données ici sont des exemples mais je peux certifier que les gains sont énormes. J'utilise personnellement ce type de config sur plusieurs serveurs kimsufi débian qui fonctionnent aussi bien avec leur 256 Mo que mes anciens serveurs avec 512 ou 1 Go de mem. Si en plus vous mettez en place un système de cache pour soulager encore plus le serveurs apache PHP vous pouvez augmenter la part de mémoire dédiée au serveur apache léger et gagner encore plus de processus.
Voilà. Je dispose d'un petit tuto sur le sujet mais vu sa taille (plusieurs pages) il n'avait pas sa place sur ce forum. Mais, bientôt, je le publierais sur mon blog... quand il existera!
Posons d'abord le problème : Comment puis-je, avec un serveur LAMP donné, servir plus d'utilisateurs ?
Ceux qui ont lu les articles précédents, ont compris que la limite au nombre de connections simultanées sur un serveur web était donnée par la mémoire du dit serveur. Si on ne peut pas ou on ne souhaite pas augmenter la mémoire du serveur, il faut donc diminuer la taille mémoire requise par un processus apache.
Mais comment faire ? C'est assez simple, il suffit de virer les modules apache inutiles. Que ce soit apache 1 ou 2, seul 3 modules sont nécessaires (et encore!). Il s'agit de mod_dir, mod_mime_et mod_log_config.
Maintenant, listez les modules dont vous avez réellement besoin (mod_rewrite si vous utilisez le rewriting , mod_php si vous utilisez PHP etc)
Maintenant vous pouvez recompiler apache. Voici le résultat d'une commande "ps aux" sur le même serveur avec dans le premier cas une installation d'apache universelle (faite avec apt-get) et dans le deuxième cas, une configuration maison d'apache compilée à partir des sources.
- Code: Tout sélectionner
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
rapache 12830 0.0 2.9 129836 30204 ? S 04:02 0:00 /usr/sbin/httpd
apache 12831 0.0 2.9 128872 29332 ? S 04:02 0:00 /usr/sbin/httpd
apache 12832 0.0 2.8 128796 29232 ? S 04:02 0:00 /usr/sbin/httpd
apache 12833 0.0 2.8 128840 29228 ? S 04:02 0:00 /usr/sbin/httpd
apache 12834 0.0 1.9 119512 19656 ? S 04:02 0:00 /usr/sbin/httpd
apache 12835 0.0 2.8 128840 29240 ? S 04:02 0:00 /usr/sbin/httpd
apache 12843 0.0 2.9 128876 29280 ? S 04:02 0:00 /usr/sbin/httpd
apache 12844 0.0 1.9 119504 19616 ? S 04:02 0:00 /usr/sbin/httpd
- Code: Tout sélectionner
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
rwww-php 10598 0.0 2.9 13800 7308 ? S Jan31 2:57 /usr/local/apachephp/bin/httpd
www-php 21702 0.0 2.9 13848 7360 ? S Jan31 3:00 /usr/local/apachephp/bin/httpd
www-php 13560 0.0 2.9 13816 7368 ? S Jan31 2:51 /usr/local/apachephp/bin/httpd
www-php 4642 0.0 2.9 13680 7188 ? S Jan31 3:17 /usr/local/apachephp/bin/httpd
www-php 13570 0.0 2.9 13824 7376 ? S Jan31 2:41 /usr/local/apachephp/bin/httpd
www-php 16508 0.0 2.9 13832 7332 ? S Jan31 2:46 /usr/local/apachephp/bin/httpd
www-php 24369 0.0 2.9 13744 7264 ? S Jan31 3:22 /usr/local/apachephp/bin/httpd
www-php 4578 0.0 2.9 13804 7324 ? S Jan31 3:06 /usr/local/apachephp/bin/httpd
Vous remarquez que le gain mémoire est énorme pour chaque processus apache (colonne RSS). La taille mémoire nécessaire à un processus apache est divisée par 4 , on peut donc multiplier par 4 le nombre de processus apache à mémoire donnée. (Attention, le gain peut varier d'une configuration à l'autre)
Maintenant, on peut aller encore plus loin en se posant la question suivante ? Ai je besoin d'un processus de 7Mo pour servir un fichier gif de 3ko ? Bien sur que non. Voyons ce que donne une commande "ps aux" avec un serveur apache compilé sans PHP :
- Code: Tout sélectionner
www-lig 17824 0.0 0.6 3100 1664 ? S Feb09 0:27 /usr/local/apachelight/bin/httpd
www-lig 31027 0.0 0.7 3108 1672 ? S Feb09 0:27 /usr/local/apachelight/bin/httpd
www-lig 10266 0.0 0.6 2980 1656 ? S Feb09 0:28 /usr/local/apachelight/bin/httpd
www-lig 7379 0.0 0.6 2972 1652 ? S Feb09 0:27 /usr/local/apachelight/bin/httpd
www-lig 9737 0.0 0.7 3116 1680 ? S Feb09 0:28 /usr/local/apachelight/bin/httpd
www-lig 11443 0.0 0.7 3108 1672 ? S Feb09 0:27 /usr/local/apachelight/bin/httpd
www-lig 31106 0.0 0.7 3112 1680 ? S Feb09 0:26 /usr/local/apachelight/bin/httpd
Un processus apache ne nécessite plus que 1,6Mo de mémoire ! Oui, mais j'ai absolument besoin de PHP.
Pas de problème, nous allons compiler un apache avec PHP que nous ferons écouter sur le port 8080 et un apache sans PHP mais avec mod_proxy que nous ferons écouter sur le port 80 et qui renverra les demande pour des fichiers PHP vers le port 8080.
En supposant que notre serveur ai 1 Go de mem consacrée à apache, nous pouvons:
dans le cas 1 (apache satndard) lancer 35 processus apache (1 Go/30Mo)
dans le cas 2 (apache compilé avec php) lancer 133 processus apache (1 Go/7,5Mo)
dans le cas 3 (2 instances d'apache) lancer 100 apache avec PHP (750Mo/7,5 Mo) plus 156 apache léger (250Mo/1,6Mo) soit 256 processus apache.
Les valeurs données ici sont des exemples mais je peux certifier que les gains sont énormes. J'utilise personnellement ce type de config sur plusieurs serveurs kimsufi débian qui fonctionnent aussi bien avec leur 256 Mo que mes anciens serveurs avec 512 ou 1 Go de mem. Si en plus vous mettez en place un système de cache pour soulager encore plus le serveurs apache PHP vous pouvez augmenter la part de mémoire dédiée au serveur apache léger et gagner encore plus de processus.
Voilà. Je dispose d'un petit tuto sur le sujet mais vu sa taille (plusieurs pages) il n'avait pas sa place sur ce forum. Mais, bientôt, je le publierais sur mon blog... quand il existera!
Article très intéressant.
Comment fait-on pour connaitre les modules apache activés, et quelle commande permet d'en désactiver un.
Merci.
ps : dans php.info, sur mon serveur, je peux lire:
Loaded Modules core mod_access mod_auth mod_log_config mod_logio mod_env mod_setenvif prefork http_core mod_mime mod_status mod_autoindex mod_negotiation mod_dir mod_alias mod_so mod_cgi mod_expires mod_php4 mod_rewrite mod_userdir
Comment fait-on pour connaitre les modules apache activés, et quelle commande permet d'en désactiver un.
Merci.
ps : dans php.info, sur mon serveur, je peux lire:
Loaded Modules core mod_access mod_auth mod_log_config mod_logio mod_env mod_setenvif prefork http_core mod_mime mod_status mod_autoindex mod_negotiation mod_dir mod_alias mod_so mod_cgi mod_expires mod_php4 mod_rewrite mod_userdir
Artcile intéressant. C'est vrai que pour un gros site de type "téléchargement" qu'il n'utilise que très peu php, ça ne sert à rien que celui-ci bouffe toute la mémoire...
Pour les modules d'apache, c'est dans ton httpd.conf que cela se passe...
Pour les modules d'apache, c'est dans ton httpd.conf que cela se passe...
mattth a écrit:Artcile intéressant. C'est vrai que pour un gros site de type "téléchargement" qu'il n'utilise que très peu php, ça ne sert à rien que celui-ci bouffe toute la mémoire...
Un site web c'est aussi des immages, du flash, du pdf, des feuilles de styles, du javascript etc...
Tous ces types de fichiers n'ont pas besoin de passer par un processus apache utilisant PHP !
ajax a écrit:Article très intéressant.
Comment fait-on pour connaitre les modules apache activés, et quelle commande permet d'en désactiver un.
Merci.
ps : dans php.info, sur mon serveur, je peux lire:
Loaded Modules core mod_access mod_auth mod_log_config mod_logio mod_env mod_setenvif prefork http_core mod_mime mod_status mod_autoindex mod_negotiation mod_dir mod_alias mod_so mod_cgi mod_expires mod_php4 mod_rewrite mod_userdir
Tu as la réponse!
Loaded Modules core mod_access mod_auth mod_log_config mod_logio mod_env mod_setenvif prefork http_core mod_mime mod_status mod_autoindex mod_negotiation mod_dir mod_alias mod_so mod_cgi mod_expires mod_php4 mod_rewrite mod_userdir
J'utilise beaucoup php (forums). a priori, tous ces modules sont-ils nécessaires ?
J'utilise beaucoup php (forums). a priori, tous ces modules sont-ils nécessaires ?
ajax a écrit:Loaded Modules core mod_access mod_auth mod_log_config mod_logio mod_env mod_setenvif prefork http_core mod_mime mod_status mod_autoindex mod_negotiation mod_dir mod_alias mod_so mod_cgi mod_expires mod_php4 mod_rewrite mod_userdir
J'utilise beaucoup php (forums). a priori, tous ces modules sont-ils nécessaires ?
c'est à toi de voir car je ne connais pas ton code ! Tu trouveras une explication de l'utilités des modules ici: http://www.personnels.univ-paris3.fr/ww ... ytype.html
Mais n'hésite pas à supprimer des modules et faire des tests !
-

Topsitemaker - WRInaute impliqué

- Messages: 376
- Inscription: Dim Nov 19, 2006 0:47
Articles très sympa,
Peux tu nous dire à quoi sert la colonne VSZ ?
Peux tu nous dire à quoi sert la colonne VSZ ?
Topsitemaker a écrit:Articles très sympa,
Peux tu nous dire à quoi sert la colonne VSZ ?
hé hop, un petit "man ps" nous dit :
VSZ Process virtual address size
en clair et en français VSZ designe la taille virtuelle de ton programme En gros, on additionne sa taille, celle de ses bibliotheques partagées et la memoire qu'il utilise pour son fonctionnement.
RSS donne la quantité de memoire physique utilisée par le processus
-

Topsitemaker - WRInaute impliqué

- Messages: 376
- Inscription: Dim Nov 19, 2006 0:47
Merci pour le VSZ,
Un échantillon de mes process apache
Le RSS semble être plus petit pour apache 2.2 compilé à la mano en revanche le VSZ est plus gros.
Je trouvait que compiler soi-même Apache m'apportait plus de flexibilité, là tu viens de me donner une argument de plus pour la compilation maison.
Un échantillon de mes process apache
apache 3740 0.0 0.1 64144 6312 ? S 08:20 0:00 /usr/local/apache-2.2...
apache 3767 0.2 0.1 64112 6404 ? S 08:21 0:00 /usr/local/apache-2.2...
apache 3769 0.1 0.1 64000 6088 ? S 08:21 0:00 /usr/local/apache-2.2...
apache 3774 0.2 0.1 64120 6348 ? S 08:21 0:00 /usr/local/apache-2.2...
apache 3776 0.0 0.1 64144 6284 ? S 08:21 0:00 /usr/local/apache-2.2....
apache 3777 0.1 0.1 64136 6352 ? S 08:21 0:00 /usr/local/apache-2.2....
Le RSS semble être plus petit pour apache 2.2 compilé à la mano en revanche le VSZ est plus gros.
Je trouvait que compiler soi-même Apache m'apportait plus de flexibilité, là tu viens de me donner une argument de plus pour la compilation maison.
rog a écrit:comment veux tu lancer un second server apache si le premier est privilegié sur le port
faudrait bidouiller grave
rog
tssss! tsss! Dans ton httpd.conf, il suffit de mettre le port 8080 (par exemple) pour apache compilé avec php.
Robinson a écrit:Comment installer une seconde instance d'apache ? (sans php)
Et comment la configurer ?
Merci
Tu ajoute dans le fichier config.layout (dans les sources apache) deux layouts (ApacheLight et ApachePHP) :
- Code: Tout sélectionner
# Layout Apache leger.
<Layout ApacheLight>
prefix: /usr/local/apachelight
exec_prefix: $prefix
bindir: $exec_prefix/bin
sbindir: $exec_prefix/bin
libexecdir: $exec_prefix/libexec
mandir: /usr/local/man
sysconfdir: /etc/apachelight
datadir: /home/www
iconsdir: $datadir/icons
htdocsdir: $datadir/html
manualdir: /home/apache-man
cgidir: $datadir/cgi-bin
includedir: /usr/include/apachelight
localstatedir: /var/httpdlight
runtimedir: $localstatedir/rtlogs
logfiledir: $localstatedir/logs
proxycachedir: $localstatedir/proxy
</Layout>
# Layout Apache php.
<Layout Apachephp>
prefix: /usr/local/apachephp
exec_prefix: $prefix
bindir: $exec_prefix/bin
sbindir: $exec_prefix/bin
libexecdir: $exec_prefix/libexec
mandir: /usr/local/man
sysconfdir: /etc/apachephp
datadir: /home/www
iconsdir: $datadir/icons
htdocsdir: $datadir/html
manualdir: /home/apache-man
cgidir: $datadir/cgi-bin
includedir: /usr/include/apachephp
localstatedir: /var/httpdphp
runtimedir: $localstatedir/rtlogs
logfiledir: $localstatedir/logs
proxycachedir: $localstatedir/proxy
</Layout>
Puis lors de la conpilation tu stipile le layout à utiliser :
Exemple apachelight (avec les modules mod_access, mod_proxy, mod_rewrite, mod_alias, mod_vhost_alias, mod_log_config, mod_mime et mod_dir) A toi de choisir les modules !
- Code: Tout sélectionner
# ./configure --with-layout=ApacheLight \
--disable-module=all \
--enable-module=access \
--enable-module=proxy \
--enable-module=rewrite \
--enable-module=alias \
--enable-module=vhost_alias \
--enable-module=log_config \
--enable-module=mime \
--enable-module=dir
Exemple apachephp (avec les modules mod_access, mod_rewrite, mod_alias, mod_vhosts_alias, mod_log_config, mod_mime, mod_dir et PHP5) C'est à toi de choisir les modules !
- Code: Tout sélectionner
./configure --with-layout=ApachePHP \
--disable-module=all \
--enable-module=access \
--enable-module=rewrite \
--enable-module=alias \
--enable-module=vhost_alias \
--enable-module=log_config \
--enable-module=mime \
--enable-module=dir \
--activate-module=src/modules/php5/libphp5.a
Bien sur, tu peux modifier les layouts à ta guise !
Ensuite comme précisé plus haut, tu personnalise les fichiers httpd.conf de chacune des instances d'apache pour écouter sur un port différent (80 pour apachelight et 8080 pour apachephp)
Dans la section virtualHosts de apachelight, tu parametre ton proxy , par exemple :
- Code: Tout sélectionner
<VirtualHost ipdevotreserveur>
DocumentRoot "Cheminverslesite"
ServerName nomdevotreserveur
RewriteEngine On
RewriteOptions 'inherit'
RewriteRule \.(gif|jpg|png|txt|css|js|html)$ - [last]
RewriteRule ^/(.*)$ http://ipdevotreserveur:8080/$1 [proxy]
<Directory "Cheminverslesite">
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
rog, c'est pas de la bidouille mais une façon d'utiliser la souplesse d'apache !
- bozoleclown
- WRInaute passionné

- Messages: 893
- Inscription: Jeu Nov 24, 2005 19:08
Quelqu'un a déjà mis en oeuvre un Lighttp pour fournir tout le contenu statitque, avec un apache derriere pour le php ?
Ca doit être encore plus léger qu'un apache dénudé.
Ca doit être encore plus léger qu'un apache dénudé.
Je vais essayer cela.
Mais il n'y a aucun risque de modifier l'instance qui fonctionne actuellement en ajoutant et compilant une nouvelle instance ? (sans réinstaller ApachePHP)
ça me paraît trop simple pour être vrai...
Edit :
Un processus apache est lancé pour que "objet" ouvert (images,fichiers, pages) ?
Je pensais qu'un processus était lancé pour une "page" toute entière, tous "objets" compris.
Mais il n'y a aucun risque de modifier l'instance qui fonctionne actuellement en ajoutant et compilant une nouvelle instance ? (sans réinstaller ApachePHP)
ça me paraît trop simple pour être vrai...
Edit :
Un processus apache est lancé pour que "objet" ouvert (images,fichiers, pages) ?
Je pensais qu'un processus était lancé pour une "page" toute entière, tous "objets" compris.
17 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 :
- Guide d'optimisation des redirections pour le référencement
- Changer d'hébergeur web sans pénaliser son référencement
- Comment créer une page web en PHP
- 25 astuces pour optimiser son blog
- A propos des redirections sauvages (302)
- Lancement de Spider Simulator
- Article sur le fichier .htaccess
- La presse parle de WebRankInfo...
- Conseils d'optimisation de la balise TITLE (titre d'une page HTML)
- Changements de nom de domaine et TrustRank
Consultez la description détaillée des produits ou services de Google suivants : Google PageRank, Google Automat, Google Web Accelerator
- Analyse de la classe C (adresse IP)
Cet outil vous permet de vérifier si plusieurs sites sont hébergés sur la même classe C (adresse IP du serveur). - Analyse de l'entête HTTP
Cet outil vous permet de connaître le code HTTP renvoyé par le serveur pour une page donnée.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité






le forum