Apache et mySQL

Fermé
jcrigot Messages postés 11 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 27 août 2008 - 26 août 2008 à 18:38
Joulieigne Messages postés 1 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 3 janvier 2011 - 3 janv. 2011 à 11:27
Bonjour,

Je consulte avec fruit ce forum depuis un certain temps, mais je viens seulement de m'inscrire maintenant. J'espère pouvoir partager les quelques connaissances que j'ai à l'avenir.

L'objet de ce message est de vous faire part d'un souci que je rencontre actuellement sur un serveur dédié. Il fonctionne sous linux (Gentoo, distrib ovh, quelque peu modifiée)

Le serveur fait en fait principalement tourner un site tournant sur un CMS appelé eZ publish. La société qui a développé le site a également adapté l'installation du serveur pour que eZ fonctionne.

Bref...

Toujours est-il que le serveur plante actuellement très régulièrement, en gros une fois par heure. Divers problèmes apparaissaient dans les logs que j'ai pu résoudre, mais cela ne change rien.

En regardant maintenant de plus près, je constate par netstat, une multiplication des connexions au socket mySQL. J'ai le sentiment que c'est la saturation de mySQL qui bloque tout. C'est donc sans doute Apache qui ne ferme pas proprement les connexions mySQL.

Après ce long speech, ma question est la suivante ? Y a-t'il un paramètre à indiquer à Apache ou mySQL pour fermer automatiquement ou au bout d'un certain temps ces connexions ?

A moins que vous ne voyiez un autre point à éclaircir ;)

Merci bien de votre aide

JC
A voir également:

20 réponses

Tu as plus d'information sur "eZ publish" ? C'est du php ? autre chose ?

Pour moi, le problème est localisé sur ce composant : pour une raison X (à déterminer) il bloque une ressource dans ta base, et donc le nombre de connexions augmente (cf ton netstat), pour la même raison, les requêtes au serveur Apache sont bloquées et se prolongent dans le temps, jusqu'à atteindre la limite du MaxClients. Dans tous les cas, Apache est hors de cause (sauf si dans les logs apache tu vois le nombre de requêtes augmenter) : ce n'est pas lui qui se connecte à MySQL, mais bien ton application. Augmenter le MaxClients ne servira à rien : j'aurais même tendance à le réduire pour empêcher les nouvelles requêtes à ton web de rajouter encore de la charge sur ta base... Ca la "protège" en quelque sorte...

Est-ce que tu as un accès à ta base lorsque le problème survient ? Un "show processlist" en mysql peut te permettre de voir les requêtes en cours et depuis combien de temps elles sont présente, ça te permettrait d'y voir plus clair.
1
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
26 août 2008 à 18:41
Bonjour,

j'ai une question : ton mysql est-il bindé en local ou sur ton adresse de serveur dédié OVH ?
0
jcrigot Messages postés 11 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 27 août 2008
26 août 2008 à 18:54
Euh... Je dirais en local, mais je sais pas comment en être sûr ;)
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
26 août 2008 à 18:57
Hmmm regardes dans ton fichier /etc/mysql/my.cnf et chercher la ligne "bind-address" et regarde quelle est l'adresse à côté.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jcrigot Messages postés 11 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 27 août 2008
26 août 2008 à 18:59
Merci ;)

C'est donc bien ça, c'est en local
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
26 août 2008 à 19:07
Et tu as quoi dans tes logs apache ou mysql ? quand le problème apparaît les serveurs sont-ils toujours démarrés? Et quels sont les éventuels messages d'erreurs?
0
jcrigot Messages postés 11 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 27 août 2008
26 août 2008 à 19:29
Dans les logs mysql, il n'y a rien de particulier, en dehors de l'enregistrement de chacun des redémarrages :
080826 19:00:01 [Note] /usr/sbin/mysqld: Normal shutdown
080826 19:00:02 [Note] /usr/sbin/mysqld: Shutdown complete
080826 19:00:03 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.0.21-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 0  Gentoo Linux mysql-5.0.21


J'avais désactivé le redémarrage au cours de la nuit dernière pour voir ce qu'il se passait et aucun message n'est apparu

Pour ce qui est d'Apache, il en est tout autre, à l'heure de la panne, on trouve la ligne suivante :
[Tue Aug 26 04:17:44 2008] [error] server reached MaxClients setting, consider raising the MaxClients setting


La valeur du MaxClients est pourtant fixée à 150 et notre site n'est plus très très consulté pour le moment...

JC
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
26 août 2008 à 19:38
Et juste avant le Normal Shutdown complete tu as quoi? Et au niveau d'apache lorsque cela survient quel est le message d'erreur sur la page?
0
jcrigot Messages postés 11 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 27 août 2008
26 août 2008 à 20:21
Dans les logs de mySQL, avant le normal shutdown, j'ai le même bloc correspondant au shutdown précédent

Sinon, quand la panne a eu lieu, si l'on cherche à se connecter au site, rien ne s'affiche, de la même manière que si le serveur apache était coupé.
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
26 août 2008 à 20:32
Donc apache ne s'arrête pas lui c'est ça? parce que je dirais que le problème vient d'apache et pas de mysql.

Une base SQL qui s'arrête ne rend pas à proprement parler un serveur apache en rade. Souvent tu as une page avec une erreur SQL qui s'affiche comme quoi tu ne peux te connecter à ta base, enfin si le code est bien monté.

Pour moi faut voir du côté apache. Par contre pourquoi mysql s'arrête ça...
0
jcrigot Messages postés 11 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 27 août 2008
26 août 2008 à 20:53
Merci beaucoup de tes conseils et de la grande rapidité de tes réponses.

Je viens de me pencher sur la config de Apache et me suis rendu compte que le paramètre KeepAlive était sur On. Je viens de le passer sur Off. J'en ai profité aussi pour monter le MaxClients à 200 (au lieu de 150) et baisser le timeout à 30 (au lieu de 300).

J'ai retiré le redémarrage automatique, je vais tester le site pour m'assurer qu'il fonctionne correctement et j'attends de voir si il y aura plantage ou non dans les heures à venir ;)

Encore merci de ton aide, je te tiens au courant ;)
0
jcrigot Messages postés 11 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 27 août 2008
26 août 2008 à 21:46
Oui, oui, j'ai des infos sur eZ publish, c'est un CMS PHP-mySQL.... Du même type que Spip, en fait...

Je laisse du coup les paramètres comme ça, en attendant que ça plante. J'irai voir du coté de mySQL à ce moment-là et t'en dirai plus.
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
26 août 2008 à 22:39
Dis moi qu'appelles-tu "manière que si le serveur apache était coupé." ? Tu veux dire que tu as une page erreur 404?
0
jcrigot Messages postés 11 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 27 août 2008
26 août 2008 à 23:12
Il semble que les manipulations que j'ai faites n'aient servies à rien, Apache vient de se bloquer
mySQL fonctionne correctement et son processlist monte à 201, soit les 200 MaxClients + la connexion en console.

Une cope de ce que j'obtiens :
mysql> show processlist;
+-----+------+-----------+--------+---------+------+-------+------------------+
| Id  | User | Host      | db     | Command | Time | State | Info             |
+-----+------+-----------+--------+---------+------+-------+------------------+
|   1 | root | localhost | dompdf | Sleep   | 7344 | NULL  | NULL             |
|   2 | root | localhost | dompdf | Sleep   | 7342 | NULL  | NULL             |
|   9 | root | localhost | dompdf | Sleep   | 7190 | NULL  | NULL             |
|  17 | root | localhost | dompdf | Sleep   | 7137 | NULL  | NULL             |
|  19 | root | localhost | dompdf | Sleep   | 7113 | NULL  | NULL             |
|  20 | root | localhost | dompdf | Sleep   | 7106 | NULL  | NULL             |
...............................................................................
| 594 | root | localhost | dompdf | Sleep   |  633 | NULL  | NULL             |
| 595 | root | localhost | dompdf | Sleep   |  632 | NULL  | NULL             |
| 599 | root | localhost | dompdf | Sleep   |  623 | NULL  | NULL             |
| 602 | root | localhost | dompdf | Sleep   |  596 | NULL  | NULL             |
| 606 | root | localhost | dompdf | Sleep   |  581 | NULL  | NULL             |
| 610 | root | localhost | dompdf | Sleep   |  562 | NULL  | NULL             |
| 611 | root | localhost | dompdf | Sleep   |  560 | NULL  | NULL             |
+-----+------+-----------+--------+---------+------+-------+------------------+
201 rows in set (0.00 sec)

J'ai enlevé un certain nombre de lignes au milieu pour ne pas encombrer vos écrans.

J'ai aussi chargé le site en ligne, et rien ne charge.
Au bout d'un certain temps, une page firefox se charge indiquant:
La connexion avec le serveur a été réinitialisée pendant le chargement de la page.

        


        
        

La liaison au réseau a été interrompue pendant la négociation d'une connexion. Veuillez réessayer.
0
jcrigot Messages postés 11 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 27 août 2008
27 août 2008 à 02:34
sans doute y a t'il un souci dans l'installation qui a été faite de eZ Publish et du site sur le serveur...

cependant, pour éviter l'engorgement des process Apache sur mySQL, j'ai ajouté dans /etc/mysql/my.cnf la ligne wait_timeout = 60 qui a résolu mes problèmes.

Je garde un oeil sur le serveur, mais je pense être soulagé de ce souci.

Un grand merci à vous de m'avoir aidé dans ma recherche ;)

JC
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
27 août 2008 à 10:40
Je vais monter un site eZ Publish et je te dis si j'ai le même souci.
0
jcrigot Messages postés 11 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 27 août 2008
27 août 2008 à 12:19
Je me suis emballé un peu trop vite... Le serveur était de nouveau planté ce matin. $

En retournant dans les logs je me suis rendu compte qu'il y a avait pour apache un certain nombre d'accès demandé à des fichiers qui n'existent pas (et c'est normal qu'ils n'existent pas, j'ai demandé au webmaster)
J'ai trouvé aussi cette ligne qui date d'avant-hier midi et que je n'avais pas repéré. Elle reste en fait très isolée et ne se répète pas :
PHP Fatal error:  Maximum execution time of 30 seconds exceeded in /home/...


Cependant, après les manips de la nuit dernière, j'ai eu du nouveau :
[Wed Aug 27 06:10:02 2008] [error] server reached MaxClients setting, consider raising the MaxClients setting
[Wed Aug 27 11:12:03 2008] [warn] child process 14420 still did not exit, sending a SIGTERM
[Wed Aug 27 11:12:03 2008] [warn] child process 14421 still did not exit, sending a SIGTERM
[Wed Aug 27 11:12:03 2008] [warn] child process 14422 still did not exit, sending a SIGTERM
[Wed Aug 27 11:12:03 2008] [warn] child process 14423 still did not exit, sending a SIGTERM
[Wed Aug 27 11:12:03 2008] [warn] child process 14424 still did not exit, sending a SIGTERM
[Wed Aug 27 11:12:03 2008] [warn] child process 14426 still did not exit, sending a SIGTERM
[Wed Aug 27 11:12:03 2008] [warn] child process 14428 still did not exit, sending a SIGTERM
[Wed Aug 27 11:12:03 2008] [warn] child process 14429 still did not exit, sending a SIGTERM
...

Et ça continue jusqu'à ce qu'on relance le serveur

Bref, je sèche un peu...
Je suis allé voir php.ini et j'ai demandé de limiter le nombre de process MySQL ouverts... Wait'n see
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
27 août 2008 à 12:38
Oui j'ai aussi des accès à des pages qui n'existent pas c'est de la recherche en bloc pour trouver une faille sur ton site.

Là il s'agit pour ceux qui le font de trouver si tu as installé un phpmyadmin ou un autre programme permettant l'accès à ton site et à ta base de données, le plus souvent.

Et encore je suis sûr que tu as pas regardé les tentatives de connexions en ssh :-)
Pour limiter les tentatives de connexions en ssh tu peux installer si tu veux fail2ban.
0
jcrigot Messages postés 11 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 27 août 2008
27 août 2008 à 14:43
Ok, je ne savais pas pour les tentatives en http.
J'avais déjà consulté les logs ftp et ssh, mais là, j'y suis habitué :D

Je suis en train de me demander si le problème ne serait pas aussi lié à PHP. Je regarde donc de ce coté aussi, mais sans tellement de succès...
0
Urielxx Messages postés 190 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 25 juin 2013 46
27 août 2008 à 21:15
Le nombre connexion en sleep sur ta BDD ne me parait pas normal : certaines connexions sont là depuis plus de 10 minutes et c'est anormal si tu fais du php (normalement, la connexion php ne dure pas). Par contre, je me demande ce que fait ton application du coup. Elle boucle ? Si oui, tu devrait consommer plein de CPU, je pense que tu t'en serais aperçu. Tu as essayé de savoir ce que fabriquait le php ? (avec un lsof ou un strace) ?

Essaie de mettre un MaxRequestsPerChild à 1 dans ton Apache : c'est lourd, mais ça force un nouveau child après chaque requête http, et donc tu ne devrais pas avoir ces requêtes qui trainent..

Une question ; dans tes lgos apache, tu vois des requêtes qui durent très longtemps ? Si oui, ce sont elles les coupables, p-etre qu'il s'agit d'une page en particulier qui pose problème.

Et sinon, il y a un connect-timeout pour les clients mysql, mais je ne sais pas comment ton appli gère ça...
0
Joulieigne Messages postés 1 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 3 janvier 2011
3 janv. 2011 à 11:27
Bonjour,

Je vois que le POST n'est pas récent mais les problèmes informatique demeurent ! ;-)

J'ai le même soucis sur un site en eZpublish 4.2.0.

Le site marche plutôt pas trop mal, sauf quand il y a un peu de trafic, là les processus d'Apache se multiplient, le CPU augmente jusqu'à arriver à saturation, et le site est inaccessible. Il faut attendre le timeout des connexions httpd pour retrouver le site, voir relancer les services.
J'arrive à bien reproduire le problèmes, j'utilise linkExaminer qui me scanne toutes les url du site créant un fort trafic virtuel et là c'est le drame ! :p

J'ai à peu de chose près les mêmes symptômes que jcrigot et à priori une config qui semble similaire. Pas plus de message d'erreur dans les LOG, seulement dans ceux d'Apache :
[Tue Aug 26 04:17:44 2008] [error] server reached MaxClients setting, consider raising the MaxClients setting

J'ai un peu tout essayé sans savoir vraiment quoi modifier :

- modification de la conf Apache
- modification de la conf de MySQL

et là je sèche...

Quelqu'un aurait il rencontré et résolu le même problème ?

Merci pour vos réponses.
0