2008-11-23 7 views
0

J'ai configuré une pile LAMP simple sur Debian et j'ai quelques problèmes avec le serveur web Apache.Comment réparer l'instabilité d'Apache?

Chaque 3-4 heures, le serveur Web entre dans un interblocage et toutes les demandes qui touchent le bloc de la base de données. Le serveur crée un nouvel enfant pour chaque requête. Le nombre de processus augmente très rapidement. Après quelques secondes, Monit remarque que quelque chose ne va pas et redémarre le serveur Apache.

Je suspecte que ce problème est généré par la façon dont PHP gère le regroupement de connexions de base de données car le serveur est toujours capable de répondre aux requêtes de contenu statique. Avez-vous vécu ce genre de comportement? Que devrais-je essayer de faire?

Mise à jour: Problème résolu. Il semble que ce soit une mauvaise idée d'utiliser APC pour la mise en cache des opcode et les données utilisateur. J'utilise maintenant Memcache pour stocker les données utilisateur et APC uniquement pour le code. Je reçois toujours des erreurs de segmentation de temps en temps mais le serveur est la plupart du temps stable.

+0

Avez-vous vérifié pour voir si c'est un problème à la couche du serveur MySQL? Vous avez dit que le contenu statique peut être servi, pouvez-vous toujours vous connecter à la base de données avec d'autres outils? – acrosman

+0

Oui. Le serveur mysql continue de fonctionner correctement. –

Répondre

1

Pourquoi ne regardez-vous pas les bûches? /var/log/apache2/* est un bon endroit pour commencer. Qu'est-ce qui est demandé juste avant que le serveur ne meure? À partir de là, vous pouvez probablement déduire ce qui ne va pas. Comme les scripts php sont terminés après 30 secondes par défaut, l'erreur doit être assez massive pour provoquer quelque chose comme ça.

+0

Il n'y a aucun message dans le journal des erreurs. J'ai couru sur un enfant bloqué et il attendait après un futex. Je pense qu'il y a un problème dans le code de connexion php avec le serveur mysql car dans le même temps, le serveur était capable de gérer les demandes de contenu statique. –

1

Vérifiez vos paramètres de délai d'expiration dans /etc/apache2/apache2.conf, j'ai rencontré des problèmes similaires lorsque Timeout est réglé sur haut et le système est frappé avec un tas de connexions abandonnées.

+0

le délai d'expiration est défini sur 100. Cette valeur est-elle trop élevée? –

+0

A moins que vous ne soyez critiqué par un ver qui laisse tomber les connexions sans les fermer, ça devrait aller (j'utilise 60 moi-même). –

3

Je pense que les problèmes sont les suivants:

  • Une requête de base de données de longue durée difficile qui bloque d'autres demandes. C'est assez facile si vous utilisez le moteur MySQL MyISAM qui ne dispose que d'un verrouillage au niveau de la table et les lecteurs peuvent facilement bloquer les auteurs et vice versa, donc une simple requête, par exemple une table utilisateur, peut bloquer le serveur tout entier. la base de données attend des E/S. Vous pouvez généralement diagnostiquer ceci en utilisant "SHOW PROCESSLIST" ou un outil qui fait cela pour vous.
  • Après avoir défini MaxClients beaucoup trop élevé pour la RAM disponible sur un serveur prefork - presque tout le monde le fait. Si vous utilisez un Apache Prefork "gros" (par exemple avec PHP en cours de traitement), ne définissez pas MaxClients plus haut que vous avez assez de RAM. C'est probablement beaucoup moins que les valeurs typiques de 100 ou 150.

Ces deux choses conspirent pour causer le problème que vous voyez. Ils doivent tous deux être corrigés car ils peuvent causer des problèmes seuls.

Ceci est entièrement basé sur des conjectures et de l'expérience.

+0

Nous utilisons InnoDB.J'améliorerai nos scripts de surveillance pour sauvegarder la sortie de SHOW PROCESS LIST quand Apache bloque mais je pense que nous n'avons aucune requête étrange en cours d'exécution. Le serveur a beaucoup de RAM, la mémoire de swap n'est jamais utilisée. –

0

Le journal mysql-slow est également utile pour trouver les requêtes qui causent des problèmes.

Questions connexes