# Apache + php -> lent et bouffe des ressources ???

## MD@home

J'ai un serveur qui tourne sous Gentoo avec comme combinaison logiciel: Apache, Mysql, Php.

Les pages Php sont parfois très longues à chargés. D'ailleurs plus y'a de Php plus c'est long.  Apache bouffe facilement 5% des ressources CPU (atlon XP 1500+) pour une ou deux pages de chargés. Je n'ai que rarement plus de deux accès aux pages du serveur en même temps.

Et j'assiste parfois à des pics à 99,9%

Ensuite si je fais un ping à partir de mon serveur vers ovh.net, voici ce que j'obtient parfois:

octets from 213.186.33.6: icmp_seq=32 ttl=252 time=372.6 ms

64 octets from 213.186.33.6: icmp_seq=33 ttl=252 time=949.0 ms

64 octets from 213.186.33.6: icmp_seq=34 ttl=252 time=1340.2 ms

wrong data byte #0 should be 0xb0 but was 0xafaf 46 1b 3e a5 14 c 0

       8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27

       28 29 2a 2b 2c 2d 2e 2f

64 octets from 213.186.33.6: icmp_seq=35 ttl=252 time=1479.0 ms

wrong data byte #0 should be 0xb1 but was 0xb0b0 46 1b 3e de 14 c 0

       8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27

       28 29 2a 2b 2c 2d 2e 2f

64 octets from 213.186.33.6: icmp_seq=36 ttl=252 time=595.7 ms

64 octets from 213.186.33.6: icmp_seq=37 ttl=252 time=57.2 ms

64 octets from 213.186.33.6: icmp_seq=40 ttl=252 time=74.9 ms

Je vois pas trop comment faire, j'ai pas mal cherché, mais personne ne semlbe savoir  :Sad:  Quelqu'un a une idée ?

Les mêmes logiciels sur une autre distribution ça fonctionne très bien  :Sad: 

Merci d'avance

----------

## Mat_le_ouf

T'as quelle version de ces softs?

Pour ma part j'ai Apache 1.3.27 avec PHP 4.2.3 et ça fonctionne à merveille.

J'ai en moyenne 28000 hits par jour dessus, donc on peut pas dire que ça chôme  :Smile: 

----------

## MD@home

Pareil  :Sad:  Mêmes versions.

J'en ai marre, ça lague avec quedal d'acccès.

----------

## MD@home

http://www.nasov.net/phpinfo.php

----------

## Mat_le_ouf

t'es sur que c'est pas ton code PHP qui merdouille?

----------

## MD@home

J'héberge 100 sites. Ceux qui m'ont fait la remarque que c'est lent, c'est ceux qui ont des forums surtout. (moi en connexion local, je vois moi facilement la différence mais il y en a une)

----------

## sergio

C'est peut être tout simplement un problème de réseau, vérifie que sur tes hubs et tes routeurs que tu n'a pas un taux de collisions, d'erreurs CRC trop élévé, ce qui oblige le serveur à faire sans cesse des retry et...

C'est un problème courant sur un réseau (parfois une carte réseau défectueuse, un cable merdique, etc...) crois en mon expérience...

A+

----------

## Mat_le_ouf

 *MD@home wrote:*   

> J'héberge 100 sites. Ceux qui m'ont fait la remarque que c'est lent, c'est ceux qui ont des forums surtout. (moi en connexion local, je vois moi facilement la différence mais il y en a une)

 

Tu dis que tu héberges 100 sites et qu'il n'y a pas beaucoup de traffic sur ton serveur!

Ca me parait quand même assez étonnant... Maintenant je suis d'accord avec Sergio, vérifie les paramètres de ton réseau, c'est jamais inutile de toute façon...

----------

## MD@home

ok, merci pour vos conseils. J'ai l'impression que ce problème est apparu en installant php 4.3 (j'avais oublié que j'avais fait l'update et il me semble que ça date de ce moment là). Je suis repassé à 4.2.3, ça à l'air de mieux fonctionner, mais je suis pas sûr.

J'ai modifié mon réseau (remplacement du routeur par un bête hub, et différentes autres config) mais ça n'a rien changé. Mon routeur ne me signale pas de problème.

Je vais quand-même changer la carte réseau du serveur, j'ai mis une peabird en attendant de trouver mieux. Du 3com serai préférable.  :Smile: 

Sinon j'héberge 100 sites, mais la plupart ne sont pas encore installés, j'ai ouvert la plupart des comptes y'a très peu de temps, donc pas encore beaucoup de requêtes.

Merci 

@+

----------

## MD@home

J'me suis gouré, les problèmes continuent.  :Sad: 

Si je restart Apache ça ne le fait plus pendant un moment et ça reprend après. Si je l'arrête les problèmes cessent totalement.

Apache fait des pics d'utilisation du CPU, alors que personne n'accède au pages pendant ce temps là (je regarde les logs du traffic en même temps). Si quelqu'un charge une page, par contre, il n'utilise pas forcément de ressources.

----------

## Bouiaw

Si les problèmes apparaissent surtout pour ceux qui utilisent les forums, le problème peut aussi venir de ta base de donnée   :Exclamation: 

----------

## MD@home

C'est vrai, j'aurai du penser à ça.

Mais j'ai vérifier, et c'est dès qu'une page contient du php, qu'il utilise mysql ou non, que ça devient plus lent en comparaison à une bête page html.

Cet aprèm Apache à finit par planter  :Sad: 

----------

## Mat_le_ouf

T'as essayé les mailing-list de PHP?

Il doit certainement y en avoir avec une possibilité de recherche dans les archives...

Ton problême est quand même bizarre, tu es vraiment certain que ce n'est pas le code PHP qui est en cause? J'avais moi aussi planté mon serveur Apache avec du mauvais code PHP...

----------

## MD@home

J'vais suivre les conseils de sergio, la carte réseau est douteuse. Je vais faire des tests. Du 3Com devrait faire l'affaire. (Peabird, chiprealtek actuellement)

@+

----------

## MD@home

J'ai fait un test. En moyenne le temps de chargement d'une page contenant du php fait grimper l'utilisation des ressources CPU par Apache à 2.9% en moyenne  (testé avec plusieurs pages).

Contre 0.1% pour une page html. 

Est-ce normal, sachant que c un XP 1500+ comme proc ?

Et sinon toujours ce ping, avec des erreurs tout le temps, ma conexion est ralentie.

J'ai bien envi de réinstaller tout.

EDIT: après une batterie de tests plus longues, il s'avère que certains forums prennent à eux seuls 6%de cpu par page. Y'a aussi 2 ou 3 sites où on peut même pas les charger. Et tant que le visiteur insiste et ne stoppe pas sa requête, la charge CPU reste à 80% voir 99% parfois. J'comprend que ça ai planté. Je vais tester d'autres versions de php plus anciennes. Sinon, j'irai voir sur des sites php si y'a pas des idées.

@+

----------

## sergio

 *MD@home wrote:*   

> 
> 
> Et sinon toujours ce ping, avec des erreurs tout le temps, ma conexion est ralentie.
> 
> J'ai bien envi de réinstaller tout.
> ...

 

Je maintient ce que je t'ai dit je penche pour un problème matériel : il n'est pas normal d'avoir des pertes de paquets ou des erreurs sur un ping...

Je m'occupe d'un réseau d'entreprise et lorsque qu'il y a des pertes de paquets sur les ping, c'est quasiment toujours lié à des problèmes hardware... 

Je te propose si tu peut le faire le test suivant :

Arrêter apache et ts les services du sreveur sauf le réseau, et refaire le test des pings (d'abord avec 64 octets, puis en augementant la taille des paquets)... si tu as des erreurs c'est un problème matériel (ou peut être une défaillance du module qui gère ta carte réseau çà peut arriver avec certaines cartes à base de puces bon marché) 

Tiens nous au courant...

A+

----------

## MD@home

J'ai changé le pc, changé la carte réseau (mis une D-Link) puis tout réinstallé sur la machine, et toujours pareil.

Toujours ce ping et apache qui prend 5% de CPU à la moindre page de chargée.

Qu'est-ce que je peux faire ? brancher directement le modem sur le serveur sans passer par le routeur ? je doute que ça change quelque chose, ça le faisait ausis quand j'avais cette configuration.

----------

## DuF

Je pense un peu comme sergio, mais bon changer le matos ça ne résout pas forcément le problème, ça le contourne des fois, si la conf est mauvaise ça n'arrange rien.

S'assurer de bien mettre du full duplex par exemple, sinon si qqn a une conf semblable a la tienne, peut être pourrait-il tester ton code PHP ? Perso je peux pas, j'ai pas la conf matérielle ou logiciel pour le faire.

----------

## MD@home

Et en plus de ça, maintenant j'ai des problèmes de liens.

Quand on spécifie la valeur d'une variable dans l'url ça ne passe pas, enfin ça dépend des scripts php. Les forums PhpBB n'ont pas de problèmes tandis que certaines pages de sites oui: admin.php3?p=archiver ne passe pas, p est null.

Si quelqu'un a une idée au passage.

Sinon je comprend pas pourquoi j'ai toujours ce problème. Etant donné que jai changé la carte réseau et réinstallé ma gentoo, je pense pas que ça soit matériel. Si je stoppe Apache, le phénomène ne se produit plus. Et ce sont les pages php qui prennent des resources. Ca ne vient pas du code, c'est sur pleins de sites différents et des scripts connus comme phpbb.

Mon phpinfo() si ça intéresse quelqu'un: http://www.nasov.net/phpinfo.php

----------

## dioxmat

je pense pour un pb materiel ou de config materiel.

un ping ne doit pas merder comme ca, et ca na rien a avoir avec php ou apache.  genre ca peut etre un mauvais mtu ou je sais pas trop quoi.

maintenant pour le load pris par apache/php, il faut bien le configurer, ne pas loader 146 000 trucs, ne pas utiliser php en tant que cgi, etc...

----------

## skuld

 *MD@home wrote:*   

> Et en plus de ça, maintenant j'ai des problèmes de liens.
> 
> Quand on spécifie la valeur d'une variable dans l'url ça ne passe pas, enfin ça dépend des scripts php. Les forums PhpBB n'ont pas de problèmes tandis que certaines pages de sites oui: admin.php3?p=archiver ne passe pas, p est null.

 

Ca ce n'est pas un bug, c'est un fonctionnement normal de PHP depuis la 4.2.0 : à savoir que les variables globales ne sont plus acceptées par défaut. 

En clair, si on considère l'url http://www.bidule.com/toto.php?variable=valeur :

- avec PHP < 4.1.0, tu récupères valeur dans ton code avec $variable

- avec PHP >= 4.1.0, il te faut utiliser $_GET["variable"]

il y a de même $_POST["variable"], $_SESSION["variable"], $_SERVER["variable"] (plus d'infos ici : http://www.php.net/release_4_1_0.php )

soit tu modifies toutes les paqes pour les mettre en conformité avec la nouvelle méthode, soit tu passes le paramètre register_globals à On dans ton php.ini (puis tu redémarres Apache)

----------

## MD@home

skuld: merci, je ne savais pas. Et mettre php en register_globals on, ça pose un problème de sécurité ? 

Sinon ça fonctionne pour mon problème. Ca marchait toujours pas même en ayant changé de carte réseau. Hier soir j'ai compilé apache et php à la main, sans passer par les e-build en prenant les ./configure d'un autre serveur qui fonctionne bien.

Maintenant je n'ai plus de problème de ping. Reste à savoir la rapidité, je n'ai pas encore beaucoup testé. Je vous dirai ça demain.

Merci à tous pour votre aide.

@+

----------

## skuld

avec l'ancienne méthode (donc register_globals à On), si tu sais comment est fait le code source du php, et que tu sais que la variable toto n'est pas initialisée avant son utilisation, tu peux donc l'initialiser en la passant en paramètre de l'url, ce qui peut effectivement poser des problèmes de sécurité.

----------

## MD@home

Finalement le problème n'est pas réglé. De temps en temps apache monte à 99% d'utilisation du CPU. Y'a un site qui provoquait ça (la page ne chargait jamais et apache prenait 99% de CPU), je l'ai enlevé, mais ça continue. Peut-être y'a-t-il une page que je n'arrive pas à trouver qui provoque ça.

----------

## MD@home

Y'a plusieurs pages dont des bouts du code php font monter les ressources CPU, mais je n'arrive pas à identifier quel bout de code est en cause, donc quels fonctions.

Comment c'est possible ça ? Php devrait fonctionner, y'a pas de raison pour que ce genre de problème arrive.

----------

## dioxmat

bah, php c'est pas magique tu sais, faut bien que ca bouffe des ressources sur certains trucs... cela dit si tu pouvais identifier les fonctions en question ca serait bien plus pratique si tu veux que on t'aide :)

----------

## Mat_le_ouf

J'ai déja eu moi aussi ce genre de problême avec un script que j'avais programmé "à l'arrache".

La meilleure façon pour voir ce qui fonctionne pas c'est de mettre des points d'arrêts, ou alors de commenter toutes les fonctions en les réactivant une à une.

Bref du gros boulot et pas drôle du tout  :Sad: 

----------

## MD@home

et sinon ça pourrait pas venir de ma ligne Adsl ? J'ai des problèmes de coupures et aussi avec l'alarme qui utilise la ligne téléphonique.

----------

## MD@home

Page où apache génère un status du serveur: http://www.nasov.net/server-status

Ce qui m'intrigue c'est qu'en général, plus le nombre de données envoyé est important, plus la charge CPU est élevé, pour une requête. Et il s'agit généralement de .gif, ou .jpeg.

@+

----------

## avendesora

Je ne vois pas ce qui est si étonnant.

Si ton serveur envoi un gros fichier, il faut qu'il le lise et l'envoie sur le réseau, donc ton filesystem est sollicité, et ta couche réseau est sollicitée. Donc tu utilise du CPU. Plus le fichier est gros, plus l'utilisation totale de ressources sera importante. Pour des petits fichiers, ils resteront surement en cache qqpart, donc ca se verra presque pas, mais pour des gros fichiers (grosses images p.e.), ca va se voir un peu.

Pour ce qui est des PHP, ton serveur Apache interprète l'intégralité de tes pages à chaque fois que qq'un y accède (et un peu plus). Plus le php est complexe, plus tu chargera ton CPU. Si en plus tu sollicite un bd, ca n'arrangera rien.

En gros, si tes php font des trucs compliqués, faudra bien qu'ils mangent des ressources pour les faire, ces trucs.

Si en plus un de test équipements réseau est défectueux (lien peu fiable, full/half duplex mal configuré, cable pas cher en boulle qui passe à coté de ton frigo...), tu cumules parce que ton CPU va devoir gérer des retransmissions, et tu auras des temps de latence non-négligeables.

En gros, perso, le fait qu'apache prenne 90% du cpu de temps en temps, ca ne me choque pas du tout. Si tu n'avais que des pages html pure, ca n'arriverait qu'en période de grosse charge, mais avec du cgi ou php ou jsp ou n'importequoi d'autre, ca arrivera.

Ce qui n'exclue pas que tu aies des .php bugés...

----------

## MD@home

ok, merci pour ces informations.

Je comprend, il suffit qu'il y ai un problème réseau (y compris la ligne Adsl), pour que des trames doivent êtres renvoyés, ce qui fait monter le CPU en charge.

Mais c'est vrai que y'a un moment où c'était beaucoup plus rapide, donc un problème est apparu. Je vais vérifier le réseau.

Quels conseils me donneriez-vous pour ça ? Config de la carte réseau ? cable ?

Etant donné que  j'héberge des sites dont je ne suis pas l'auteur, il me faudrai un outil de monitoring qui me permetrai de voir quel sont les scripts qui bugent.

Merci encore

@+

PS: quelqu'un pourrait me donner le résultat d'un ping sur nasov.net, mon serveur ? Merci

----------

## avendesora

Essaye de voir si tu as des pertes sur ton interface réseau:

```
netstat -i
```

te donne des stats globals simples. Si tu as des gros chiffres dans les colonnes autre que RX-OK etTX-OK, tu as des problèmes réseau (essaye d'échanger le cable, puis le port du switch/routeur/hub sur lequel tu te branche. Essaye d'échanger la carte avec une autre machine pour voir si ca change qqch).

La charge de ton CPU ne va pas être sensiblement influencée par des erreurs réseau (ta carte réseau devrait les gérer en interne). Par contre, les retransmissions chargent ton interface et ta ligne, et le routeur surement. Donc pas bon pour les perf en général.

En moyenne, ton CPU est chargé à combien?

----------

## MD@home

Avec netstat, pas de problème.

J'ai déjà totalement changé ma config réseau: cable, carte, hub, routeur, modem,  pc.

Mon CPU est à 85% de libre en général, mais c très variable. Ca dépend du nombres de requêtes. En pleine nuit comment ça, c'est plutôt 95%.

Avant j'étais sous red-hat, je n'avais pas ce problème. C'est après être passé à gentoo, c depuis que ce problème traîne.

J'ai testé pleins de versions différents, de apache, php, mysql etc.., installé à la main, réinstallé tout le système.

Désespérant.

----------

## avendesora

Ton /server-status indique une charge moyenne de ~ 2% CPU pour apache sur les 11 dernières heures, avec +5kB/s de trafic moyen. Ca me semble pas excessif du tout.

Tu as d'autres applis qui tournent sur cette machine?

----------

## MD@home

mysql, proftpd, postfix. C'est tout.

Plus y'a de traffic, plus y'a d'erreur dans l'envoie des trames, plus les pages sont longues à charger (>1min), plus le surf sur internet est très difficile.

Un ami à moi héberge  200 sites avec le même FAI et la même connexion Adsl (512/128), et c'est plus rapide. Sa machine est aussi moins puissante.

----------

## MD@home

J'arrive chez moi, y'avais plus de connexion. Mais le modem indiquait l'envoie continue de données. Je reboot pleins de fois le routeur, le modem, le serveur, j'obtiens un semblant de connexion avec un ping de 5000ms. Je débranche le cable réseau du serveur, et tout redevient normal. Je le reboot, je rebranche le cable et là ça va à peu près, même si j'ai pleins d'erreur dans l'envoie des trames.

Du coup, j'hésite à dire que c'est un problème avec la ligne Adsl.

----------

## -JeaN-

Juste une remarque, vu que tu dis que la charge CPU augmente plus la page est lourde, tu n'aurais pas un problème de "HTTP-Compression" ?

Il se peut que tu aies programmé une compression en php ? Ou bien sur le serveur Apache ? Si oui essaies de voir sans ce que ça donne ...

----------

## Mat_le_ouf

 *MD@home wrote:*   

> Je débranche le cable réseau du serveur, et tout redevient normal.

 

T'as essayé de changer de cable?

Ou alors de carte, tu connais pas quelqu'un qui puisse t'en passer une le temps d'un test?

----------

## MD@home

déjà fait, j'ai changé de cable et de carte (marque différente, chipstet différent)

Je vais enoyer  mes partitions chez un ami pour qu'il test chez lui sur son matos, comme ça je serais fixé.

----------

