Problème de htaccess et de CPU serveur

Discussion dans 'URL Rewriting et .htaccess' créé par ouiffi, 11 Février 2010.

Tags:
  1. ouiffi
    ouiffi WRInaute discret
    Inscrit:
    28 Mars 2005
    Messages:
    85
    J'aime reçus:
    0
    Bonjour,
    Je me suis rendu compte ce matin que le CPU très élevé de mon serveur s'expliquait par le htaccess d'un de mes sites...
    J'ai plusieurs questions :

    1. l'un d'entre vous peut-il m'indiquer comment optimiser ce dernier? http://www.assosports.com/htaccess.html
    2. est-il préférable de mettre mes règles dans le fichier de conf du site ou bien cela n'aura aucun impact (mes tests me poussent à croire que non) ?
    Pour comprendre mes règles, les 2 premiers paramètres comprennent systématiquement :
    - le libelle du club
    - la saison
    (il s'agit d'un site associatif)
    3. un rewrite map serait il préférable pour ces infos ? (mon expérience professionnelle me pousse à croire que ça ne changerait pas grand chose)

    Merci d'avance pour votre aide.
    La situation devient critique pour mes sites..

    Cordialement,
    Julien
     
  2. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Effectivement, tu as une liste un peu longuette...

    Tu peux regrouper une bonne partie de tes rewriterules qui ont une structure similaire. Par exemple:
    Code:
    RewriteRule ^(.*)/(.*)/buteur/([0-9]*)/$ club/php/buteur/index.php?IdJoueur=$3&currentclub=$1&currentsaison=$2 [QSA,L] 
    RewriteRule ^(.*)/(.*)/passe/([0-9]*)/$ club/php/passe/index.php?IdJoueur=$3&currentclub=$1&currentsaison=$2 [QSA,L] 
    RewriteRule ^(.*)/(.*)/carton/([0-9]*)/$ club/php/carton/index.php?IdJoueur=$3&currentclub=$1&currentsaison=$2 [QSA,L] 
    
    peut être remplacé par:
    Code:
    RewriteRule ^(.*)/(.*)/(buteur|passe|carton)/([0-9]*)/$ club/php/$3/index.php?IdJoueur=$4&currentclub=$1&currentsaison=$2 [QSA,L]
    
    Avec ça tu devrais pouvoir réduire assez considérablement le nombre de rewriterules.

    De la même façon, tu as souvent plusieurs rewriterules pour des légères variation de syntaxe, par exemple sur les "coachator". Au lieu de faire le tri à ce niveau là, utilise une seule regex qui renvoie toute la fin au script, et laisse le script trouver le bon cas de figure. Même en utilisant 6 regex dans le code php, ces 6 regex ne seront vérifiées que si tu es dans le cas coachator (et en plus elles seront probablement plus "simples" et donc plus rapides à exécuter), alors que là les 6 regex sont évaluées pour chaque requête. Avec un explode plutôt que des regex tu dois pouvoir aussi optimiser un peu.

    Une autre possibilité pourrait être de tout renvoyer (avec une seule rewriterule, quoi) sur un script php unique qui va pouvoir faire un petit explode sur l'URL et appliquer des règles probablement plus simples et rapides à tester que tout un tas de regexp. Avec un bon hash (pardon, tableau associatif) et des pointeurs de fonctions (je ne sais pas comment ça s'appelle en php) ça doit pouvoir aller nettement plus vite.

    Jacques.
     
  3. ouiffi
    ouiffi WRInaute discret
    Inscrit:
    28 Mars 2005
    Messages:
    85
    J'aime reçus:
    0
    Bonjour,
    Merci pour votre retour.
    Effectivement je vais essayer d'alléger tout ça.
    Pensez-vous que ceci seul puisse être à l'origine de mon 95% CPU ?
    Pensez-vous qu'un rewritemap m'aiderait dans ce cas?
    Pensez-vous que cela soit mieux de supprimer mon htaccess et de tout mettre dans le fichier de conf?
    Julien
     
  4. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    C'est clair que ça doit bouffer du CPU, après c'est difficile de dire s'il n'y a que ça, ça dépend beaucoup de tes scripts php, de tes requêtes sql, de ta config, etc. Un petit top pourrait déjà donner une petite idée.

    Une autre optimisation possible: mettre en premier les règles qui correspondent aux pages les plus fréquemment consultées (en tenant compte des priorités pour les règles qui en ont besoin): si 90% des requêtes correspondent à la dernière rewriterule, apache va devoir vérifier toutes les rewriterules une par une pour chaque requête, alors que si 90% des requêtes correspondent à la première rewriterule, il pourra s'arrêter là, puisqu'il y a un [L] à chaque fois.

    Le rewritemap je ne sais pas trop comment tu l'utiliserais dans le cas présent (à moins que tu aies des choses genre /toto/ -> turlututu, /tata/ -> tsointsoin plutôt que /toto/ -> toto, /tata/ -> tata).

    Je ne sais pas si Apache met en cache d'une façon ou d'une autre les .htaccess. Si ce n'est pas le cas (ce qui est fort possible), le mettre dans le fichier de conf pourrait te faire gagner du CPU (pas besoin pour Apache de lire et interpréter ce très long fichier à chaque fois).

    Jacques.
     
  5. ouiffi
    ouiffi WRInaute discret
    Inscrit:
    28 Mars 2005
    Messages:
    85
    J'aime reçus:
    0
    Je n'arrive effectivement pas à inverser mes regles pour mettre au tout début les 3 dernières règles
    Code:
    RewriteRule ^([a-z]*)/([0-9]{4}[a-z]{1})/(.*)/$ club/php/$3/index.php?currentclub=$1&currentsaison=$2 [QSA,L]
    RewriteRule ^([a-z]*)/([0-9]{4}[a-z]{1})/$ club/index.php?currentclub=$1&currentsaison=$2 [QSA,L]
    RewriteRule ^([a-z]*)/$ /club/index.php?currentclub=$1 [QSA,L
    Puis les règles "clients", puis les règles "admin"

    Concernant le rewritemap, pour mon 1er champ, c'est un libellé texte que je vais chercher en base après. Ca mepermettrait d'avoir directement l'id...

    Concernant le "top"n il ne m'indique pas grand chose en fait... Une load à 10 (des fois 30) mais en début de semaine j'étais à 50 minimum donc ça va... Y a plein de ligne "daemon" mais je n'arrive pas à expliquer leur origine, je ne m'y connais pas vraiment en système...

    Julien
     
  6. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Si ces règles peuvent "matcher" des URLs qui doivent être prises en compte par d'autre regexps, tu est effectivement obligé de les laisser à la fin (ou en tous cas après toutes les autres regexps qui peuvent entrer en conflit). Comme je ne connais pas le format de tous les champs que tu matches avec des .* par ailleurs, difficile pour moi de t'en dire plus.

    Par contre je pense que tu dois pouvoir mettre la plupart des règles admin beaucoup plus loin, non? Tu y gagnerais probablement pas mal.

    Le rewritemap ne ferait que déplacer ce que tu as dans ton code PHP, non? Pas grand intérêt...

    Et pour le top, si tu nous le copiais-collais on pourrait probablement t'en dire plus. Note que 10 de load average c'est déjà beaucoup, à moins que tu ais une tripotée de cores dans ton serveur :) normalement ça veut dire que ton CPU est déjà saturé en permanence.

    Jacques.
     
  7. ouiffi
    ouiffi WRInaute discret
    Inscrit:
    28 Mars 2005
    Messages:
    85
    J'aime reçus:
    0
    Ok pour le rewritemap.

    Pour le format, j'ai un libelle "tout type de texte az-_ "
    et une chaine du format 2010s (année + 1 lettre)
    j'ai mis ça dans mon htaccess : RewriteRule ^(.*)/([0-9]{4}[a-z]{1})/

    j'ai activé le debug des logs, et j'ai plein d'erreurs en permanence, dont je ne connais pas l'origine....
    Code:
    [Thu Feb 11 16:53:57 2010] [error] [client 87.118.122.12] File does not exist: /data/inetpub/wwwroot/assosports/usmontgermont
    [Thu Feb 11 16:53:59 2010] [error] [client 87.118.122.12] File does not exist: /data/inetpub/wwwroot/assosports/usmontgermont
    [Thu Feb 11 16:54:01 2010] [error] [client 87.118.122.12] File does not exist: /data/inetpub/wwwroot/assosports/usmontgermont
    [Thu Feb 11 16:54:01 2010] [error] [client 66.249.65.60] File does not exist: /data/inetpub/wwwroot/assosports/club/php/joueurs
    [Thu Feb 11 16:54:02 2010] [error] [client 87.118.122.12] File does not exist: /data/inetpub/wwwroot/assosports/usmontgermont
    [Thu Feb 11 16:54:04 2010] [error] [client 87.118.122.12] File does not exist: /data/inetpub/wwwroot/assosports/usmontgermont
    [Thu Feb 11 16:54:06 2010] [error] [client 87.118.122.12] File does not exist: /data/inetpub/wwwroot/assosports/usmontgermont

    et pour le top, voici (c'est pas top du tout là) :

    top - 16:55:03 up 22 min, 1 user, load average: 72.07, 61.53, 36.86
    Code:
    Tasks: 183 total,  59 running, 124 sleeping,   0 stopped,   0 zombie
    Cpu(s): 95.0%us,  4.6%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
    Mem:   1018244k total,   986132k used,    32112k free,    12864k buffers
    Swap:  1044216k total,   582920k used,   461296k free,    35540k cached
    
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
     3015 daemon    15   0 23068 6816 2508 S  4.6  0.7   0:00.73 httpd
     2256 daemon    25   0 45692  13m 2644 R  3.3  1.3   0:25.30 httpd
     2258 daemon    25   0 62596  21m 2492 R  3.3  2.1   0:37.09 httpd
     2265 daemon    24   0 64036  10m 2504 R  3.3  1.0   0:37.29 httpd
     
  8. ouiffi
    ouiffi WRInaute discret
    Inscrit:
    28 Mars 2005
    Messages:
    85
    J'aime reçus:
    0
    Bonjour,
    J'ai trouvé quelquechose de pas normal qui ressemble à une boucle (infinie je ne pense pas).
    Il y a très souvent (1/sec) des requpêtes avec en paramètres plein de fois le même paramètre. Comment l'expliquez selon vous? Je ne vois pas pour ma part... Le souci peut venir de là je pense.

    Code:
    82.236.141.76 - - [11/Feb/2010:17:51:35 +0100] "GET /club/php/individu/index.php?IdIndividu=71&currentclub=assafoot&currentsaison=2008v&currentsaison=2008v&currentsaison=2008s&currentsaison=2008v&currentsaison=2008j HTTP/1.0" 200 19499 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 GTB6 (.NET CLR 3.5.30729)"
    81.52.143.15 - - [11/Feb/2010:17:51:36 +0100] "GET /sclerheufoot/2007j/article-detail-5883-/ HTTP/1.1" 302 - "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)"
    82.236.141.76 - - [11/Feb/2010:17:51:38 +0100] "GET /club/include/img/pictos/modifier.gif HTTP/1.0" 200 1039 "http://www.sclerheufoot.com/club/php/individu/index.php?IdIndividu=71&currentclub=assafoot&currentsaison=2008v&currentsaison=2008v&currentsaison=2008s&currentsaison=2008v&currentsaison=2008j" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 GTB6 (.NET CLR 3.5.30729)"
    82.236.141.76 - - [11/Feb/2010:17:51:38 +0100] "GET /club/include/img/pictos/supprimer.gif HTTP/1.0" 200 1060 "http://www.sclerheufoot.com/club/php/individu/index.php?IdIndividu=71&currentclub=assafoot&currentsaison=2008v&currentsaison=2008v&currentsaison=2008s&currentsaison=2008v&currentsaison=2008j" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 GTB6 (.NET CLR 3.5.30729)"
    82.236.141.76 - - [11/Feb/2010:17:51:38 +0100] "GET /club/protect/individus/assa.jpg HTTP/1.0" 200 2496 "http://www.sclerheufoot.com/club/php/individu/index.php?IdIndividu=71&currentclub=assafoot&currentsaison=2008v&currentsaison=2008v&currentsaison=2008s&currentsaison=2008v&currentsaison=2008j" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 GTB6 (.NET CLR 3.5.30729)"
    81.52.143.34 - - [11/Feb/2010:17:51:39 +0100] "GET /usgosnefoot/2005v/individu/736736-k%e9vin+lemouland/ HTTP/1.1" 200 16381 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)"
    81.52.143.36 - - [11/Feb/2010:17:51:41 +0100] "GET /club/php/article/index.php?IdCategorie=3&currentclub=sclerheufoot&currentsaison=2005s&currentsaison=2005s&currentsaison=2005j HTTP/1.1" 200 25223 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)"
    90.54.23.229 - - [11/Feb/2010:17:51:41 +0100] "GET /avparce/2009s/charte/ HTTP/1.1" 200 44791 "http://www.assosports.com/avparce/2009s/classement/championnat/senior/general/1807/18120/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Orange 8.0; NaviWoo2.0; .NET CLR 1.1.4322)"
    67.195.111.254 - - [11/Feb/2010:17:51:43 +0100] "GET /assafoot/2009s/article-detail-10587-samedi+d%C3%A9cembre/ HTTP/1.0" 200 35303 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)"
    81.52.143.36 - - [11/Feb/2010:17:51:44 +0100] "GET /club/php/article/index.php?Mode=detail&IdArticle=1490&currentclub=usgosnefoot&currentsaison=2005s&currentsaison=2005v&currentsaison=2005s&currentsaison=2005s HTTP/1.1" 302 - "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)"
    81.52.143.36 - - [11/Feb/2010:17:51:47 +0100] "GET /usgosnefoot/2008v/entrainement/ HTTP/1.1" 200 16056 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)"
    66.249.65.13 - - [11/Feb/2010:17:51:49 +0100] "GET /usgosnefoot/2006s/ HTTP/1.1" 200 26030 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +https://www.google.com/bot.html)"
    193.252.149.13 - - [11/Feb/2010:17:51:49 +0100] "GET /fcsb/2008s/individu/3285-fabien-barbotin/ HTTP/1.1" 200 88 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)"
    193.252.149.15 - - [11/Feb/2010:17:51:51 +0100] "GET /club/php/equipe/index.php?IdEquipe=13454&currentclub=melessejabc&currentsaison=2008s&currentsaison=2008j HTTP/1.1" 200 16185 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)"
    81.52.143.37 - - [11/Feb/2010:17:51:51 +0100] "GET /sclerheufoot/2008s/joueur/8950/ HTTP/1.1" 200 22480 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)"
    67.218.116.133 - - [11/Feb/2010:17:51:50 +0100] "GET /club/index.php?currentclub=asmrcourseapied&currentsaison=2008s&currentsaison=2008v&currentsaison=2008j&currentsaison=2008v&currentsaison=2008v&currentsaison=2008j&currentsaison=2008v&currentsaison=2008v&currentsaison=2008s&currentsaison=2008s&currentsaison=2008s&currentsaison=2008s&currentsaison=2008s&currentsaison=2008j&currentsaison=2008j&currentsaison=2008v&currentsaison=2008v&currentsaison=2008s&currentsaison=2008j&currentsaison=2008v&currentsaison=2008v&currentsaison=2008j&currentsaison=2008s&currentsaison=2008j&currentsaison=2008s&currentsaison=2008v HTTP/1.1" 200 27293 "-" "Mozilla/5.0 (Twiceler-0.9 http://www.cuil.com/twiceler/robot.html)"
    
     
Chargement...
Similar Threads - Problème htaccess CPU Forum Date
Problème htaccess Développement d'un site Web ou d'une appli mobile 26 Mai 2020
Problème redirect 301 avec fichier htaccess URL Rewriting et .htaccess 19 Juillet 2018
htaccess avec redirection problème sécurisation URL Rewriting et .htaccess 16 Juin 2018
Problème de redirection .htaccess dans un seul cas URL Rewriting et .htaccess 7 Avril 2018
Probleme des liens 404 au niveau du fichier htaccess Problèmes de référencement spécifiques à vos sites 6 Octobre 2017
Problème accent URL Rewriting et .htaccess URL Rewriting et .htaccess 4 Novembre 2016
Problème Htaccess Netlinking, backlinks, liens et redirections 18 Janvier 2016
Problème htaccess URL Rewriting et .htaccess 11 Janvier 2016
Help: Problème de Redirection .htaccess suite erreur noms de pages Netlinking, backlinks, liens et redirections 6 Septembre 2015
Probleme de redirection de lien avec htaccess URL Rewriting et .htaccess 20 Juin 2015
Htaccess -> 301- Problème Joomla 2.5.x ? URL Rewriting et .htaccess 14 Juin 2015
Problème de blocage de téléchargement fichiers PDF avec htaccess URL Rewriting et .htaccess 9 Février 2015
Probleme avec certaines de mes redirections permanente (htaccess) Netlinking, backlinks, liens et redirections 23 Janvier 2015
Problème avec mon htaccess URL Rewriting et .htaccess 29 Novembre 2014
Htaccess et RewriteRule | problème URL Rewriting et .htaccess 25 Septembre 2014
Problème règle htaccess Crawl et indexation Google, sitemaps 21 Juillet 2013
Probleme Redirection 301 dans htaccess Joomla 3.0 Débuter en référencement 15 Juin 2013
Probleme htaccess/sous domaine URL Rewriting et .htaccess 9 Mars 2013
Suppression du www dans le htaccess : problème d'indexation ? Problèmes de référencement spécifiques à vos sites 2 Janvier 2013
Problème sur mon fichier htaccess et sur le référencement Problèmes de référencement spécifiques à vos sites 18 Octobre 2012