Aller au contenu

Forum à fort trafic réparti sur deux serveurs


CrazyMoto

Sujets conseillés

Bonjour le Hub ! :smartass:

Je rencontre des soucis important avec mes serveurs.

J'heberge principalement mon Forum Moto

Etant anciennement sur un serveur Bixeon chez sivit, je viens de migrer chez OVH avec la configuration suivante :

Deux serveurs : Un pour apache/php et un autre pour mysql. Ce sont des PIV Dual Core 2*3.0Ghz avec 2*80Go en Raid1 ainsi que 1Go de ram.

Ils sont sous debian.

Le serveur mysql c'est du bonheur... Tout va bien ! pointe de load average 0.6 :wub:

Mais le serveur apache c'est pas de la tarte !

J'ai commencé hier par un sérieux problème : Segfault d'apache...

Hier j'ai tout essayé, installations diverses, toucher le moindre parametre de configuration, essayer apache 1.3, essayer le paquet debian, compiler moi meme...

Desespéré, aprés 14h sur le PC a m'exploser le cerveau, je suis allé me coucher.

Ce matin, l'esprit clair, mais ne trouvant pas de solution... Je tente une solution de fortune... Je migre en debian testing... Miracle ça segfault plus et ca tourne sans erreur.

La configuration : apache 2.2.3 avec pour modules ceux par defaut, mod_rewrite et php 5.1.6 (avec pour seules extensions : par défaut, gd, mysql, APC Cache)

Jusque la pas de soucis... Sauf que vers midi le serveur freeze. Reboot en hard. J'obtiens ceci dans mon syslog (je suis en kernel 2.4 ovh grsec):

Sep  3 12:28:07 ns21856 sm-mta[27052]: rejecting connections on daemon MSP-v4: load average: 93
Sep 3 12:28:20 ns21856 sm-mta[27052]: rejecting connections on daemon MTA-v4: load average: 116
Sep 3 12:28:30 ns21856 sm-mta[27052]: rejecting connections on daemon MSP-v4: load average: 116
Sep 3 12:28:42 ns21856 sm-mta[27052]: rejecting connections on daemon MTA-v4: load average: 148
Sep 3 12:28:42 ns21856 sm-mta[27052]: rejecting connections on daemon MSP-v4: load average: 148
Sep 3 12:28:59 ns21856 sm-mta[27052]: rejecting connections on daemon MTA-v4: load average: 167
Sep 3 12:28:59 ns21856 sm-mta[27052]: rejecting connections on daemon MSP-v4: load average: 167
Sep 3 12:29:14 ns21856 sm-mta[27052]: rejecting connections on daemon MTA-v4: load average: 183
Sep 3 12:29:14 ns21856 sm-mta[27052]: rejecting connections on daemon MSP-v4: load average: 183
Sep 3 12:29:29 ns21856 kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)
Sep 3 12:29:29 ns21856 sm-mta[27052]: rejecting connections on daemon MTA-v4: load average: 195
Sep 3 12:29:29 ns21856 sm-mta[27052]: rejecting connections on daemon MSP-v4: load average: 195
Sep 3 12:29:31 ns21856 kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)
Sep 3 12:29:32 ns21856 last message repeated 2 times
Sep 3 12:29:32 ns21856 kernel: VM: killing process httpd
Sep 3 12:30:32 ns21856 kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)
Sep 3 12:30:32 ns21856 kernel: VM: killing process httpd
Sep 3 12:30:32 ns21856 kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)
Sep 3 12:30:32 ns21856 kernel: VM: killing process httpd
Sep 3 12:30:32 ns21856 kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)
Sep 3 12:30:32 ns21856 kernel: VM: killing process httpd
Sep 3 12:30:32 ns21856 kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)
Sep 3 12:30:32 ns21856 last message repeated 4 times
Sep 3 12:30:32 ns21856 kernel: VM: killing process httpd
Sep 3 12:30:32 ns21856 kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)
Sep 3 12:30:32 ns21856 last message repeated 3 times
Sep 3 12:30:32 ns21856 kernel: VM: killing process sshd
Sep 3 12:30:32 ns21856 kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)
Sep 3 12:30:32 ns21856 kernel: VM: killing process httpd
Sep 3 12:30:48 ns21856 kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)
Sep 3 12:30:51 ns21856 kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)
Sep 3 12:30:51 ns21856 kernel: VM: killing process httpd
Sep 3 12:31:05 ns21856 kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)
Sep 3 12:31:05 ns21856 kernel: VM: killing process httpd
Sep 3 12:31:11 ns21856 /USR/SBIN/CRON[32327]: (root) CMD (/usr/local/rtm/bin/rtm 41 >/dev/null 2>/dev/null)
Sep 3 12:31:20 ns21856 kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)
Sep 3 12:33:18 ns21856 syslogd 1.4.1#18: restart.

J'analyse la situation... apparament apache2 s'est emballé, a bouffé toute la ram, et a fini par swapper a fond et tout faire crasher :D

Je fixe un MaxClients à 120 au lieu de 256. Ca me permet d'éviter de trop charger. Situation stable depuis.

Cependant serveur apache/php dépassé en heure de pointe.

Motif : Environ 900 connectés sur mon forum Invision Power Board

http://213.251.185.122/munin/ovh.net/ns21856.ovh.net.html

On remarquera sur les graphs le MaxClient trop bas qui induit une pénurie de serveurs apache. Mais surtout la consommation monumentale en mémoire vive, et le gros pic de swap malgrés le MaxClient.

J'observe que mes processus apache consomment vraiment beaucoup de mémoire vive... Je voudrais savoir si selon vous c'est normal ? Je dois avoir jusqu'a 20-25Mo de mémoire vive consommée par un processus apache bien nourrit ?!

La solution la plus simple serait biensur de rajouter de la ram sur le dédié Ovh... Mais bon j'aimerais être sur de pas pouvoir améliorer la situation sans...

Mes questions serait donc :

  • Est ce que ma consommation de mémoire vive d'apache semble normale ?
  • Comment je pourrais augmenter les performances de mon couple apache/php ?
  • Est ce que des solutions extremes comme par exemple installer lighttpd sur mon serveur et rediriger toutes les requetes de contenu non dynamique depuis apache sur le lighttpd seraient une bonne chose ou se compliquer la vie pour pas grand chose ?
  • Est ce que vous savez comment ca marche avec OVH si je veux rajouter 1Go de ram alors que j'ai payé pour un mois et qu'il me reste 3semaines de location prépayées ? Y a moyen d'avoir une facture pour 3semaine de ram ?
  • Est ce que vous avez la moindre suggestion pour améliorer les performances de tout ça ?
  • Biensur, je vous remercie d'avance énormément.

Concernant les conseils, j'espere que Dan pourra m'éclairer de son experience, mais les conseils de tous sont biensur la bienvenue :wub: Un conseil n'a pas de prix.

Concernant les parametres majeurs de mon apache prefork :

StartServers 50

MinSpareServers 10

MaxSpareServers 20

MaxClients 120

MaxRequestsPerChild 25

Et un keepalive timeout a 3sec

Pour le MaxRequestsPerChild, j'ai testé avec une valeur de quelques miliers, s'était pas mieux (les processus consoment plus de ram).

Je reste biensur à votre entière disposition pour des informations complémentaires. Je suis pret à tester la moindre de vos suggestions en production. J'espere résoudre ces problèmes rapidement car demain je reprends mes études et il faut pas que mes histoires de serveurs me perturbent trop :(

Merci de m'avoir lu !

Bonne soirée,

Arnaud.

Modifié par CrazyMoto
Lien vers le commentaire
Partager sur d’autres sites

Ouille vraiment désolé pour toi.

Tu as essayé de contacter OVH ou non. IL me semble que c'est la première chose à faire.

Maintenant je me tais et je laisse parler les pros.

PS: Tu peux dévier une partie chez moi :hypocrite:

Lien vers le commentaire
Partager sur d’autres sites

Je me demendais aussi,

Est ce que un php en fast cgi pourrait être une bonne idée ?

Ca rendrait mes processus apache beaucoup plus légers, et me permettrait d'utiliser un mpm multithreadé... non ?

Donc plus de ram dispo... ?

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Je vois que tu as compilé php avec APC ... quelle version ?

Parce qu'une mauvaise version peut effectivement écrouler Apache.

Et les logs que tu donnes démontrent que ton serveur est à court de SWAP...

A quel niveau celui-ci se situe-t-il ?

Dan

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Dan,

Merci de ta réponse,

APC, j'ai pris la derniere version... Mais j'ai essayé sans ou avec eaccelerator, ça ne change pas grand chose... La configuration est par defaut avec un shm à 32 méga.

Le dédié est sur un partionnement par défaut OVH : 512Mo de swap.

Mais de toute manière, si je veux que mon serveur reste rapide, je suppose que je n'ai pas à l'utiliser.

Je songe à tester un remplacement total d'apache par lighttpd... Reste à voir comment ça se comporte :D

Encore Merci,

Arnaud.

Lien vers le commentaire
Partager sur d’autres sites

Lorsque je te demande à quel niveau se situe le swap, ce n'est pas pour connaître le maximum, mais bien le niveau utilisé. :)

En cas d'utilisation de swap, cela signifie que ce qu'il te manque c'est de la RAM. Perso, j'ai 2GB sur le Hub et le serveur ne swappe pas, mais avec le serveur précdent il swappait régulièrement avec 1GB de RAM.

Dan

Lien vers le commentaire
Partager sur d’autres sites

L'utilisation du swap est visible sur les graphs que j'ai montré dans mon premier message !

Mon serveur souffre d'un manque de ram, c'est évident.

Ce que je cherche à savoir, c'est pourquoi apache en consomme autant :D

PS : sur le hub tu as 2Go mais tu as aussi mysql à heberger, je me trompe ? :P Puis tu as un trafic moins contraignant pour le serveur surement.

Merci,

Bonne soirée.

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Effectivement, je n'avais pas vu le lien vers les mrtg...

Manifestement ton serveur ne swappe que peu... donc ce n'est pas la raison primaire.

Apache 2 consomme plus de RAM qu'Apache 1.3.37 ... bien évidemment.

Mais tu ne devrais pas limiter ton MacClients à 120, parce que tu dois avoir des périodes de blocage en cas de forte fréquentation.

Que la RAM soit utilisée à 100% n'est pas anormal. Un serveur Linux aura toujours tendance à utiliser le maximum de RAM disponible et ne la libèrera qu'en cas de besoin.

Ton forum est contraignant parce que tu as énormément de posts "microscopiques"... tous nantis d'images et bannières en signature. Je ne sais pas si tu héberges ces images ou si elles sont externes.

Pour afficher 1Kb de texte, tu dois aficher une douzaine de posts alors qu'il ne m'en faut qu'un seul. Donc on gagne sur le nombre d'accès.

En fait ton trafic Apache n'est pas beaucoup plus élevé que celui du Hub, il est seulement beaucoup moins efficace. :)

Comment as-tu paramétré le KeepAlive ?

Je mettrais ces valeurs, pour commencer:

StartServers 20

MinSpareServers 10

MaxSpareServers 20

MaxClients 250

MaxRequestsPerChild 100

Dan

PS: pour finir, voici une info qui peut t'orienter dans la bonne direction ;)

We do not recommend using a threaded MPM in production with Apache2. Use the prefork MPM instead, or use Apache1. For information on why, read the related FAQ entry on using Apache2 with a threaded MPM

It is not as fast, but is considered to be more stable. (http://packages.debian.org/stable/net/apache2-mpm-prefork(...) )

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir Dan,

Pour le Maxclient je sais bien que ça me bride et que je me retrouve en penurie de serveurs en pointe... mais si je l'ai fais s'était pour éviter de replanter la machine :(

Je viens d'appliquer tes parametres pour tester !

Mon keep alive est à 3 secondes... Ca me permet d'avoir le moins de processus inutiles qui consomme de la ram possible :P

Concernant l'utilisation de ram...

Je ne parlais pas de l'utilisation globale, je sais bien qu'elle est toujours maximale avec linux, mais bien de l'utilisation minimale, donnée par la commande free :

A l'instant :

[root_AT_PIVD_Master:~]# free -m

total used free shared buffers cached

Mem: 991 956 35 0 1 33

-/+ buffers/cache: 922 69

C'est la que ca devient critique :o je me trompe ?

Pour ton message au sujet des MPM multithreadés... Je n'en utilise pas ;)

Lien vers le commentaire
Partager sur d’autres sites

Je viens de remettre le MaxClients à 120....

Au bout de 5 min je commencais déja à swapper avec le maxclient "débridé"...

Ca m'intrigue le fait que apache exige tant de ram.

Dan, sur ton bixeon si tu fais un top et shift + m, tu observes jusqu'a quel pourcentage de tes 2Go de ram utilisé par un processus apache ?

Je semble être bien parti pour commander de la ram à OVH :(

Encore Merci, et surtout bonne continuation :)

Lien vers le commentaire
Partager sur d’autres sites

Avec un <shift-M> sous top, le process httpd qui consomme le plus utilise 0,9% de la RAM, soit 18Mb

Par contre les processus mysql consomment plus (vu la taille du cache que j'utilise): jusqu'à 179MB par process.

Dan

Lien vers le commentaire
Partager sur d’autres sites

Hum donc apparament mon serveur manquerait tout simplement de ram il faut croire...

Je viens d'upgrader en PIV Dual plus plus... Je salue au passage le coté bon commercial d'OVH, qui ont été trés souples.

Concernant mysql Dan, il me semble que top n'indique pas la vraie valeur consommée car dans ces threads est inclue une memoire qui leur est commune à tous ;)

Concernant l'optimisation du serveur...

Hier soir j'ai tenté une migration totale sur lighttpd... Bilan php en fastcgi, ca rame...

Ce soir je vais essayer de rediriger tout le contenu statique de mon serveur depuis apache vers un lighttpd sur un autre port... Reste à ce que je trouve comment :D

Il me faudrait une rewrite rule qui fait un truc du genre :

Si l'extension est pas .php on redirige /truc.ext vers www.domain.tld:81/truc.ext

Si quelqu'un sait m'aider à faire cette redirection je suis pas contre :D

Bonne soirée à tous !

Lien vers le commentaire
Partager sur d’autres sites

J'ai fais moi même la configuration apache suivante :

RewriteCond %{REQUEST_URI} !^/(.+)(\.php)

RewriteCond %{REQUEST_URI} !^/$

RewriteRule ^/(.+) http://truc:81/crazymoto/$1

Mais lorsque je veux afficher www.crazymoto.net/ ca me redirige sur http://truc:81/crazymoto/index.html ... Je ne comprends pas trop.... Une idée ? Merci.

Edit : j'ai reussi... ca venait du directory index de apache2 qui était en .html avant .php dans l'ordre...

Resultats : rien de concluant, autant laisser apache pour tout : /

J'ai plus d'autre solution que d'attendre ma ram je crois bien :D

++

Modifié par CrazyMoto
Lien vers le commentaire
Partager sur d’autres sites

J'ai eu un probleme similaire sur mon modeste site : un gas en italie qui a pompe integrallement tout mon site :(

J'ai bien regarde, et il me semble que PHP ne libere pas totalement toute la memoire utilisee et laisse Apache faire ce travail (et, dans mon cas, ca peu faire gros vu que je modifie des images a la vollee). Bref, comme ils pompaient toutes les images en meme temps, les process HTTPD gonflaient, gonflaient, gonflaient ... jusqu'a ce qu'ils n'y ait plus de memoire :thumbsdown:

La solution que j'ai utilise a ete de reduire MaxKeepAliveRequests et MaxRequestsPerChild : c'est pas genial niveau perf, mais ca ne crash plus.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...