[article] Optimiser son serveur dedié part II

Discussion dans 'Administration d'un site Web' créé par fandecine, 12 Février 2007.

  1. fandecine
    fandecine WRInaute passionné
    Inscrit:
    2 Avril 2005
    Messages:
    1 873
    J'aime reçus:
    0
    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é https://www.webrankinfo.com/forum/t/article-optimiser-son-serveur-dedie.51449/.

    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:
    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:
    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:
    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! :wink:
     
  2. ajax
    ajax WRInaute discret
    Inscrit:
    20 Mars 2006
    Messages:
    221
    J'aime reçus:
    0
    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
     
  3. mattth
    mattth WRInaute discret
    Inscrit:
    10 Mars 2005
    Messages:
    53
    J'aime reçus:
    0
    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...
     
  4. fandecine
    fandecine WRInaute passionné
    Inscrit:
    2 Avril 2005
    Messages:
    1 873
    J'aime reçus:
    0
    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 !

    Tu as la réponse! :wink:
     
  5. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    Fichier modules.conf pour être plus précis.
     
  6. ajax
    ajax WRInaute discret
    Inscrit:
    20 Mars 2006
    Messages:
    221
    J'aime reçus:
    0
    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 ?
     
  7. fandecine
    fandecine WRInaute passionné
    Inscrit:
    2 Avril 2005
    Messages:
    1 873
    J'aime reçus:
    0
    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 ! :wink:
     
  8. Topsitemaker
    Topsitemaker WRInaute impliqué
    Inscrit:
    19 Novembre 2006
    Messages:
    527
    J'aime reçus:
    0
    Articles très sympa,

    Peux tu nous dire à quoi sert la colonne VSZ ?
     
  9. fandecine
    fandecine WRInaute passionné
    Inscrit:
    2 Avril 2005
    Messages:
    1 873
    J'aime reçus:
    0
    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
     
  10. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    Comment installer une seconde instance d'apache ? (sans php)
    Et comment la configurer ?

    Merci :)
     
  11. rog
    rog WRInaute passionné
    Inscrit:
    21 Septembre 2006
    Messages:
    1 346
    J'aime reçus:
    0
    comment veux tu lancer un second server apache si le premier est privilegié sur le port

    faudrait bidouiller grave

    rog
     
  12. Topsitemaker
    Topsitemaker WRInaute impliqué
    Inscrit:
    19 Novembre 2006
    Messages:
    527
    J'aime reçus:
    0
    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.
     
  13. fandecine
    fandecine WRInaute passionné
    Inscrit:
    2 Avril 2005
    Messages:
    1 873
    J'aime reçus:
    0
    tssss! tsss! Dans ton httpd.conf, il suffit de mettre le port 8080 (par exemple) pour apache compilé avec php.

    Tu ajoute dans le fichier config.layout (dans les sources apache) deux layouts (ApacheLight et ApachePHP) :
    Code:
    #   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:
    # ./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:
    ./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 ! :wink:

    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:
    <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 ! :D

    :lol: :lol: :lol:
     
  14. bozoleclown
    bozoleclown WRInaute impliqué
    Inscrit:
    24 Novembre 2005
    Messages:
    693
    J'aime reçus:
    0
    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é.
     
  15. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    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.
     
  16. ACth
    ACth WRInaute impliqué
    Inscrit:
    11 Novembre 2006
    Messages:
    686
    J'aime reçus:
    0
    C'est bien le cas, mais plus apache à de modules, plus ce processus sera exigeant en mémoire.
     
  17. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    Oui et peu importe ce qu'il y a dans cette page alors...
    Mon problème est que toutes mes pages possèdent du code php...
    Donc cela m'est inutile :?

    Je vais devoir me contenter de ce que j'ai et devoir augmenter la RAM du serveur...

    Chaque processus fait 7Mo en moyenne.
    J'ai 2Go de mémoire, en stoppant apache 500 sont utilisés, il m'en reste en théorie 1.5... soit 200 processus...
    Maxclients était bien réglé à 200. je l'ai diminué à 150 et bizarrement le site rame un peu moins...

    Mais ce n'est pas suffisant...
     
Chargement...
Similar Threads - [article] Optimiser serveur Forum Date
[article] Optimiser son serveur dédié Administration d'un site Web 8 Mai 2006
Google victime d'abus d'incompréhension dominante [Article] Droit du web (juridique, fiscalité...) 17 Septembre 2010
[Article] Automatisez le déploiement de vos sites Administration d'un site Web 13 Août 2009
[Article] Les journaux cherchent le moyen de faire payer leur contenu Monétisation d'un site web 24 Mars 2009
[article] Exploiter les stats Google Webmaster Tools Référencement Google 16 Octobre 2008
[article] backlinks: la mort de l' Ancre Référencement Google 30 Septembre 2008
[Article] Lighttpd et apache sur le même serveur II Administration d'un site Web 26 Juin 2008
[Article] [beta]Sauvegarder un dédié part II Administration d'un site Web 13 Juin 2008
[Article] Configurer lighttpd (lighty) avec php5 Administration d'un site Web 16 Janvier 2008
[Article] Exemple de script de sauvegarde pour un dédié Administration d'un site Web 13 Janvier 2008
[article] APACHE, comment ça marche ? Administration d'un site Web 28 Décembre 2007
[article] Faire évoluer son architecture serveur Administration d'un site Web 4 Novembre 2007
[article] illustration de la force ds liens internes Référencement Google 19 Août 2007
[article] Bien configurer apache Administration d'un site Web 27 Novembre 2006
[article] Sécuriser son serveur LAMP Administration d'un site Web 18 Août 2006
[Article] Link Spam Detection Based on Mass Estimation Techniques avancées de référencement 9 Novembre 2005
[article] Google, Yahoo et MSN unis contre le spam ? Techniques avancées de référencement 26 Janvier 2005
[Article] L'effet sandbox sur Google Référencement Google 29 Décembre 2004
[Article] Le poids des mots, le choc des URL :-) Référencement Google 8 Décembre 2004
[Article] La commande link:URL sur Google Netlinking, backlinks, liens et redirections 5 Décembre 2004