Config Apache - consider raising the MaxClients - plantage

Bonjour tout le monde.

Depuis 2 jours, je rencontre des soucis sur mon site Web.
Hier pendant une heure le site est quasi innacessible (50 seconde pour servir une page, connection impossible pour ssh, ping repond defois (40ms) mais defois pas)

J’envoie un mail a lhebergeur pour savoir si ils ont des pb reseau, a defaut je me renseigne sur les procedure de reboot a distance :wink: ( je loue un serveur dedié sous fedora 4)

Et puis au bout d’une heure comme par magie tout revient a la normal. aucune trace dans les logs … bref rien compris, et rienc chez lhebergeur.

Aujourdhui rebelote. et la je me rappele que j’avais oublier les logs d’apache. voici ce que jy ai trouvé:

[Sun Jan 29 17:02:06 2006] [notice] child pid 23707 exit signal Bus error (7)
[Sun Jan 29 17:03:21 2006] [notice] child pid 5489 exit signal Bus error (7)
*** glibc detected *** /usr/local/apache/bin/httpd: free(): invalid next size (fast): 0x0969c488 ***
======= Backtrace: =========
/lib/libc.so.6[0xae8124]
/lib/libc.so.6(__libc_free+0x77)[0xae865f]
/usr/local/apache/libexec/libphp4.so(shutdown_memory_manager+0xca)[0x113762e]
/usr/local/apache/libexec/libphp4.so(php_request_shutdown+0x2ae)[0x111c05a]
/usr/local/apache/libexec/libphp4.so[0x115e6cb]
/usr/local/apache/bin/httpd[0x8051ef2]
[…]
======= Memory map: ========
[Sun Jan 29 17:24:11 2006] [notice] child pid 2105 exit signal Aborted (6)
[Sun Jan 29 17:28:10 2006] [notice] child pid 3320 exit signal Bus error (7)
[Sun Jan 29 17:32:02 2006] [notice] child pid 22973 exit signal Segmentation fault (11)
[Sun Jan 29 19:05:41 2006] [error] server reached MaxClients setting, consider raising the MaxClients setting
*** glibc detected *** /usr/local/apache/bin/httpd: double free or corruption (!prev): 0x0961e1c0 ***
*** glibc detected *** /usr/local/apache/bin/httpd: corrupted double-linked list: 0x096cb900 ***
======= Memory map: ========
[Mon Jan 30 20:15:06 2006] [notice] child pid 2447 exit signal Aborted (6)
[Mon Jan 30 20:16:28 2006] [warn] child process 23756 did not exit, sending another SIGHUP
[Mon Jan 30 20:16:36 2006] [error] child process 2843 still did not exit, sending a SIGKILL

Bon ya 800 ligne de tout ca. mais la ligne raising maxclient setting … Si je comprends bien il faut que j’augmente le maxClient c bien ca?

Actuellement il est à 160. Comment savoir quel valeur serait adapté? pifometre puis tester ? est ce que je met 200 ou directement 500 ? j’imagine que mettre une grosse valeur aura des consequences pas forcement bonne pour les performence de la machine ?

Merci pour vos avis.

est tu sur d’avoir atteint le max client ?
regarde tes stats mais 160 clients différents en même temps ca commence a faire du monde, ca veut dire que tu héberge un site bien fréquenté

ou sinon une autre hypothése peut etre une tentative de deny de service sur ton site ou sur ton hébergeur, ce qui expliquerais pourquoi tes pages étant lentes a ouvrir et non pas innaccessibles avec un message du type "nombre max de client dépassés, reessayez plus tard"

a part ca, des lignes du type:

double free or corruption (!prev): 0x0961e1c0 ***

me font penser a une tentative de buffer overflow sur httpd

je serais toi, je ferais mes mises a jour tout de suite :wink:

Il y a eu en janvier 8 millions de hit.
il y a en moyenne 3 , 4 hit par seconde. c’est pour cela que ca ma paru possible. sachant qu’un process apache ( si je ne me trompe pas) ne s’acheve pas tout de suite apres avoir servi la page.

Qu’en pense tu ?

Aujourdhui j’ai encore eu le probleme. Je vais regler 250 des ce soir pour etre tranquille en esperant que ce vienne bien de cela. Quite a la modifier ensuite vis a vis des commentaires sur le post.

D’autre part, le probleme as eu lieu 3 fois en 4 jours au meme horaire ( 19-20h) au moment le plus frequenté …

Merci pour la reponse :slight_smile:

ouais dans ce cas il est carrément possible que ce soit un problème de limitation
aprés est-ce que ca vient d’apache, de ton système ou de ton fournisseur… je sais pas

bon la g redemarrer en mettant 300 en maxclient et 7 en startserver … on verra demain et apres demain ce que ca donnera…

il me semble qu’au delà d’un certain nombre de connexions, il faut recompiler Apache, si ton site est vraiment populaire, essaye de te renseigner là dessus.

ouais enfin a raison de 270 000 connections par jour a mon avis faut plutot prévoir un 2éme serveur en load balancing…

exact death !
La je vient de rentré et a nouveau il y a eu une heure d’interruption aux meme heure.

meme messages.

Effectivement je ne peut mettre ke 256 en max client sinon il faut recompiler.

Mais la questino que je me pose est : Est ce que le probleme vient vraiment de la ??

Certe aujourdhui il semble que le site n’ai été interrompu “que 50 minute” ai lieu de “1h30” hier… a vrai dire je pense que etre passer de 160 a 300 (256 en realité) na pas vraiment changer grand chose et ke le probleme vient peut etre d’autre part…

Je cherche de ce coté sur google => *** glibc detected *** /usr/local/apache/bin/httpd: double free or corruption (!prev): 0x097ac158 ***

Devrait je faire une mise a jour de certain composant ?

il faut vraiment ke je trouve une solution la … :frowning:

La solution load balancing serait faite simplement via le dns ki renvoie une ip differente une fois sur 2 c ca? mais le pb c ke il faudrait gerer la syncrho entre les deux serveur …
( c un site de "tchat" via wap et web pour info, ke g fait pour un copain )

Je suis en train de me demander si php ne pourrais pas etre en cause.
Au debut du topic j’ai zappé les log pour pas trop floodé voici un court extrait un peu plus complet dans l’exemple d’aujourdhui:

[Thu Feb 2 18:07:23 2006] [notice] child pid 23690 exit signal Bus error (7)
*** glibc detected *** /usr/local/apache/bin/httpd: double free or corruption (!prev): 0x097ac158 ***
======= Backtrace: =========
/lib/libc.so.6[0xae8124]
/lib/libc.so.6(__libc_free+0x77)[0xae865f]
/usr/local/apache/libexec/libphp4.so(_efree+0x5c)[0x5b3264]
/usr/local/apache/libexec/libphp4.so(destroy_op_array+0xab)[0x5b9f63]
/usr/local/apache/libexec/libphp4.so(zend_hash_del_key_or_index+0x15d)[0x5c4aa5]
/usr/local/apache/libexec/libphp4.so(zend_hash_reverse_apply+0x44)[0x5c4c40]
/usr/local/apache/libexec/libphp4.so(shutdown_executor+0x23d)[0x5b8181]
/usr/local/apache/libexec/libphp4.so(zend_deactivate+0x84)[0x5c01fc]
/usr/local/apache/libexec/libphp4.so(php_request_shutdown+0x15f)[0x597f0b]
/usr/local/apache/libexec/libphp4.so[0x5da6cb]
/usr/local/apache/bin/httpd[0x8051ef2]
/usr/local/apache/bin/httpd(ap_clear_pool+0x38)[0x805085e]
/usr/local/apache/bin/httpd(ap_destroy_pool+0x16)[0x80508da]
/usr/local/apache/bin/httpd(ap_clear_pool+0x1c)[0x8050842]
/usr/local/apache/bin/httpd[0x80617b4]
/usr/local/apache/bin/httpd[0x8061f1e]
/usr/local/apache/bin/httpd[0x8062232]
/usr/local/apache/bin/httpd[0x8062830]
/usr/local/apache/bin/httpd(main+0x3b1)[0x8062e69]
/lib/libc.so.6(__libc_start_main+0xdf)[0xa99d5f]
/usr/local/apache/bin/httpd[0x804ff51]
======= Memory map: ========
[Thu Feb 2 18:38:50 2006] [notice] child pid 29646 exit signal Aborted (6)
*** glibc detected *** /usr/local/apache/bin/httpd: double free or corruption (!prev): 0x097e4828 ***
======= Backtrace: =========
/lib/libc.so.6[0xae8124]
/lib/libc.so.6(__libc_free+0x77)[0xae865f]
/usr/local/apache/libexec/libphp4.so(_efree+0x5c)[0x5b3264]
/usr/local/apache/libexec/libphp4.so(destroy_op_array+0xab)[0x5b9f63]
/usr/local/apache/libexec/libphp4.so(zend_hash_del_key_or_index+0x15d)[0x5c4aa5]
/usr/local/apache/libexec/libphp4.so(zend_hash_reverse_apply+0x44)[0x5c4c40]
/usr/local/apache/libexec/libphp4.so(shutdown_executor+0x23d)[0x5b8181]
/usr/local/apache/libexec/libphp4.so(zend_deactivate+0x84)[0x5c01fc]
/usr/local/apache/libexec/libphp4.so(php_request_shutdown+0x15f)[0x597f0b]
/usr/local/apache/libexec/libphp4.so[0x5da6cb]
/usr/local/apache/bin/httpd[0x8051ef2]
/usr/local/apache/bin/httpd(ap_clear_pool+0x38)[0x805085e]
/usr/local/apache/bin/httpd(ap_destroy_pool+0x16)[0x80508da]
/usr/local/apache/bin/httpd(ap_clear_pool+0x1c)[0x8050842]
/usr/local/apache/bin/httpd[0x80617b4]
/usr/local/apache/bin/httpd[0x8061f1e]
/usr/local/apache/bin/httpd[0x8062232]
/usr/local/apache/bin/httpd[0x8062830]
/usr/local/apache/bin/httpd(main+0x3b1)[0x8062e69]
/lib/libc.so.6(__libc_start_main+0xdf)[0xa99d5f]
/usr/local/apache/bin/httpd[0x804ff51]
======= Memory map: ========
[Thu Feb 2 18:40:47 2006] [notice] child pid 30604 exit signal Aborted (6)
*** glibc detected *** /usr/local/apache/bin/httpd: double free or corruption (!prev): 0x0974ea68 ***
*** glibc detected *** /usr/local/apache/bin/httpd: double free or corruption (!prev): 0x0963ab88 ***
[Thu Feb 2 18:43:30 2006] [notice] child pid 30499 exit signal Bus error (7)
======= Backtrace: =========
/lib/libc.so.6[0xae8124]
/lib/libc.so.6(__libc_free+0x77)[0xae865f]
======= Backtrace: =========
/lib/libc.so.6[0xae8124]
/lib/libc.so.6(__libc_free+0x77)[0xae865f]
/usr/local/apache/libexec/libphp4.so(_efree+0x5c)[0x5b3264]
/usr/local/apache/libexec/libphp4.so(destroy_op_array+0xab)[0x5b9f63]
/usr/local/apache/libexec/libphp4.so(zend_hash_del_key_or_index+0x15d)[0x5c4aa5]
/usr/local/apache/libexec/libphp4.so(_efree+0x5c)[0x5b3264]
/usr/local/apache/libexec/libphp4.so(destroy_op_array+0xab)[0x5b9f63]
/usr/local/apache/libexec/libphp4.so(zend_hash_del_key_or_index+0x15d)[0x5c4aa5]
/usr/local/apache/libexec/libphp4.so(zend_hash_reverse_apply+0x44)[0x5c4c40]
/usr/local/apache/libexec/libphp4.so(shutdown_executor+0x23d)[0x5b8181]
/usr/local/apache/libexec/libphp4.so(zend_deactivate+0x84)[0x5c01fc]
/usr/local/apache/libexec/libphp4.so(php_request_shutdown+0x15f)[0x597f0b]
/usr/local/apache/libexec/libphp4.so[0x5da6cb]
/usr/local/apache/libexec/libphp4.so(zend_hash_reverse_apply+0x44)[0x5c4c40]
/usr/local/apache/libexec/libphp4.so(shutdown_executor+0x23d)[0x5b8181]
/usr/local/apache/libexec/libphp4.so(zend_deactivate+0x84)[0x5c01fc]
/usr/local/apache/libexec/libphp4.so(php_request_shutdown+0x15f)[0x597f0b]
/usr/local/apache/libexec/libphp4.so[0x5da6cb]
/usr/local/apache/bin/httpd[0x8051ef2]
/usr/local/apache/bin/httpd(ap_clear_pool+0x38)[0x805085e]
/usr/local/apache/bin/httpd(ap_destroy_pool+0x16)[0x80508da]
/usr/local/apache/bin/httpd(ap_clear_pool+0x1c)[0x8050842]
/usr/local/apache/bin/httpd[0x80617b4]
/usr/local/apache/bin/httpd[0x8061f1e]
/usr/local/apache/bin/httpd[0x8062232]
/usr/local/apache/bin/httpd[0x8062830]
/usr/local/apache/bin/httpd(main+0x3b1)[0x8062e69]
/lib/libc.so.6(__libc_start_main+0xdf)[0xa99d5f]
/usr/local/apache/bin/httpd[0x804ff51]

Comme il n’y a rien dans les log d’erreur a part ca (aucune erreur php) : S’agirait il d’un bug dans la gestion memoire avec php ( peut etre suite a une mauvaise programmation de ma part )

Comme en un jour je peut pas refaire tout le programme, les differente solutions peuvent etre:
Mettre a niveau php
Modifier un parametre kkpart pour autoriser php/apache a utiliser plus de memoire ? lequel ?

Merci pour votre aide

si tu loues ton serveur, j’imagine que c’est une bonne bécane, tu devrais installer awstats pour voir si y’a pas des petits malins qui sont en train d’essayer de faire sauter la bécane.

dans ton php.ini tu peut également augmenter la taille mémoire que tu alloue aux scripts, ca peut corriger des bugs dans pas mal de cas

vérifie que ta RAM marche bien, que ton swap s’active correctement quand tu en as besoin
et sinon ba effectivement il faut un DNS qui balance les requêtes sur 2 ip et une synchronisation des tes bases de données (on prépare un dossier sur le sujet avec un pote mais il vas nous falloir un mois entier pour le finaliser)

Aloaw :hello:
tu pourrais faire un build de php en debug ? :neutre:

Comment est ce que je peut savoir ce qui utilise la memoire ?

Je m’explique. Lundi je suis passer de 256 Meg a 512.

Quand je fait un top, et que je voit l’etat de la memoire, 30 000 Free sur 500 000.
Puis quand je fait un ps -aux la je vois genre 35 lignes avec si j’additionne tout, au pire 200 000 meg

Donc la je me dit On maurait menti ?

Il y a quelque chose qui m’echappe J’aimerait savoir ou part ma memoire? Hier lorsque le serveur a rebooter, la memoire libre etait a 150 000 et puis un autre moment 100 000 … Je me demande si il y aurai pas une fuite quelque part?? ce qui explikerait que ma memoire n’est nuellepart.

la commande free de donne des infos plus précises:

$ free
             total       used       free     shared    buffers     cached
Mem:       1036236    1017304      18932          0      26076     696752
-/+ buffers/cache:     294476     741760
Swap:       979956       8816     971140

sinon, balade toi dans /proc et regarde les fichiers status des différents dossiers (classés par pid)
tu y vois la taille des différents composants appelés, regarde en particulier les pid des fork apache et tu trouvera peut etre un truc qui cloche

avec une petite commande du style:

$ for i in `ps -edf|grep apache2|awk '{print $2}'`; do cat /proc/$i/status|grep VmSize; done;

VmSize:    11756 kB
VmSize:    16264 kB
VmSize:    16140 kB
VmSize:    16264 kB
VmSize:    16240 kB
VmSize:    16880 kB
VmSize:    16084 kB
VmSize:    12716 kB
VmSize:    16080 kB
VmSize:    11756 kB

tu peut voir rapidement quelle quantité de mémoire utilise apache2 et ses fils :wink:

[edit] j’vais oublié de mettre le chemin absolu :slight_smile:

oui le resultat du petit script me donne bien les meme reponse, la par exemple lensemble des processus httpd me prenne 284 mega.

pour info voici le resultat d’un free
total used free shared buffers cached
Mem: 498936 467324 31612 0 51372 283400
-/+ buffers/cache: 132552 366384
Swap: 1024120 0 1024120

Je vais continuer a chercher dans les proc.

Sinon question:

Le fait qu il plante. Moi debut je me focalise sur la ram, mais n’ayant pas de graph sur levolution de la memoire je sais pas exactement ce kil fait ( je suis en train de configurer mrtg pour kil me mette un graph avec les valeur snmp de toute la table des .mem)
Mais meme si il arriver a 1 mega de libre, un moment il vas quand meme bien se decider a utiliser le swap non ? car jusqu’a present je l’ai jamais vu utiliser… ???

si il ne l’utilise pas c’est qu’il n’en a pas besoin :slight_smile:

Alors pour mon probleme voila ou j’en suis :

Je pense que de toute facon, dans mes script, il y as beaucoup de chose qui sont d’une part mal codé, et d’autre qui pourrait etre optimisé.

D’autre part , il sera sans doute utile de mettre a jour apache / php. la libc ?

Comme il me faut du temps pour tout reecrire, que je ne pourrait pas my mettre avant 2 semaine et que j’en ai au moins pour 1 ou 2 mois,
J’utilise la technique suivante: je reboot une fois par jour la machine.
J’ai fait un graph mrtg ou je suis levolution de la ram, et effectivement on voit la memfree qui en une journée passe de 384 meg a 20 meg.

Ma question puije faire un reboot dans un crontab ?
2°) au reboot je lance le service snmp ( service snmp start) comment le rendre automatique ?
3°) J’ai compilé apache, je souhaite faire un sorte de pouvoir utiliser mon apachectl comme un service apache start comment doit je proceder ? le but est de faire un sorte que le service demarre automatiquement comme snmp a chaque reboot de la machine ( en crontab)

Voila merci bcp

  1. oui, crontab exécute des commandes shell en tant que root (mais ca pu de rebooter un serveur :slight_smile: )

2)regarde sur quel runlevel tu boot avec la commande “cat /etc/inittab |grep default”
le numéro qu’il te renvoi correspond au dossier rc*.d qui lance les scripts au démarrage
par exemple sous debian c’est dans le dossier /etc/rc2.d

bah le pb c ke je suis incapable de trouver ou se trouve le delta de memoire entre l’addition de ce qui est utiliser par les processus, et la memoire total occupé… une sorte de fuite qui grandi au fur et a mesure de la journée jusqua ce que ca fasse planté la machine m’obligeant a envoyé un mail pour demander un reboot de la machine… alors bon …

Sinon je vais regarder car la j’avais compilé apache php et mysql a la mano, je crois qu’a l’epok c’etait pour avoir gd zlib jpeg etc… mais je pense qu’avec des yum install je doit avoir tout ca non ? car dans ce cas je vais faire comme ca, j’aurais les dernieres version, ca sera directement en service, j’aurais peut etre plus de probleme memoire…

j’essaye de voir si je peut me trouver une machine a la maison pour dl et installer une FC4, et tester ce ke les package offre…

Bon courage :wink:
mon message au dessus etait stupide ? ou chui a coté de la plaque ? :smiley: