Vendredi 30 Juillet 2010

Erreur 500

Un article de Aide Hebergeur.

Sommaire

Erreur 500 (Internal Server Error)

L'erreur 500 est une erreur qui se produit dès que le serveur HTTP rencontre une anomalie. Si cela vous arrive, il y a principalement 2 pistes d'investigation pour en déterminer la cause.

Piste 1 : Un fichier .htaccess malformé

Ces fichiers permettent d'exécuter certaines directives liées au serveur HTTP, comme la réécriture d'URL, la protection par accès, etc. Si ces fichiers sont incorrects (mauvaise syntaxe...), alors une erreur 500 est renvoyée. Vous devez donc vérifier que vous n'avez pas dans le répertoire concerné, ou un répertoire parent, un fichier .htaccess qui pourrait causer l'erreur (dans le doute, supprimez le s'il existe pour voir). Notamment, vérifiez attentivement que :

  • Vos règles d'URL Rewriting sont correctes. Relisez le manuel de référence de l'URL Rewriting.
  • Vous n'utilisez pas de directive php_value : elles sont interdites dans le .htaccess car en mutualisé PHP est compilé en module CGI et non pas en module Apache.
  • Vous n'avez pas inséré par le biais d'un éditeur de texte déconseillé (WordPad par exemple) des caractères indésirables.

Piste 2 : Votre script PHP est tué par le système

Nos serveurs mutualisés sont dotés de moniteurs qui veillent constamment à l'intégrité des ressources mutualisées. Ces moniteurs sont les garants de la qualité de service fournie car ils permettent d'éviter la plupart des abus en veillant à ce qu'un site ne puisse pas utiliser trop de ressources au détriment des autres sites hébergés.

Plusieurs paramètres sont surveillés par ces moniteurs et peuvent occasionner l'arrêt de votre script PHP :

  • Un temps d'exécution trop long : si votre script PHP dure plus de 30 secondes, alors il court le risque d'être tué par le système. Si vous obtenez une erreur 500 après un long temps de chargement de la page vous êtes sans doute dans cette situation.
  • Trop de mémoire consommée : dès lors que votre script PHP consomme plus de 32 Mo de RAM, il risque d'être stoppé par le système. En général, ceci se traduit par une erreur 500 immédiate, sans temps de chargement préalable.
  • Trop de CPU consommé : si votre script venait à solliciter le CPU trop intensément, il pourrait être tué par le système. Si les erreurs 500 se produisent de manière plutôt aléatoire, vous êtes peut être dans cette situation.
  • Trop de processus PHP simultanés : en hébergement mutualisé, nous sommes obligés de limiter le nombre de processus PHP lancés simultanément par un site ; en effet, sans cette limitation, les ressources pourraient rapidement se retrouver saturées et l'ensemble des sites hébergés impactés. Un cas fréquent est l'affichage des images à travers PHP (du type image.php?crc=/images/monimg.jpg ) : lorsque la page s'affiche, il y a autant de processus PHP lancés que d'images. C'est une mauvaise façon de programmer et dans tous les cas incompatible avec un hébergement mutualisé.

Que faire si votre script PHP est manifestement tué par le système

Bien entendu, chaque cas est particulier et nécessite sa propre investigation. Nous vous donnons ci-dessous quelques conseils de vérification :

  • Si l'erreur se produit après un long temps de chargement, identifiez un éventuel changement de comportement d'une ressource externe. Par exemple, si votre script établit des connexions avec un autre site Internet, et que ce site est indisponible, alors votre site lui-même risque de l'être. Vérifiez donc tout élément externe : inclusion d'une page/image distante, flux RSS, compteurs et livres d'or, etc. ; identifiez la ressource qui pose problème et supprimez la de votre page, ou modifiez votre programmation pour qu'elle tienne compte de la possibilité d'indisponibilité de la ressource. Un cas fréquent est aussi l'appel à des API comme celles de Google ou de Yahoo. N'oubliez pas qu'en mutualisé les IPs sont partagées, si d'autres clients abusent de ces API, l'IP risque d'être temporairement bloquée et donc votre site impacté.
  • Identifiez un éventuel problème de programmation. Vérifiez que vous n'avez pas fait de boucle infinie, ou de code pouvant générer un problème de programmation. Reprenez votre code ligne par ligne en commentant pas à pas des blocs de programmation afin d'identifier la ou les lignes qui posent problème. Vérifiez notamment que vous ne faites pas d'include distant HTTP et que vous ne travaillez qu'avec des chemins disque.
  • Vérifiez vos bases de données : Connectez-vous à votre PhpMyAdmin et vérifiez la taille de vos tables. Vérifiez qu'une table de sessions, de statistiques, de log ou autre n'a pas atteint des proportions démesurées (plus de 50 Mo par exemple). Videz les tables concernées.
  • Vérifiez les fonctionnalités de vos scripts PHP : votre site fait-il du traitement d'images, gère-t-il des statistiques de visite, envoit-il des e-mails en grand nombre, propose-t-il des fichiers lourds en téléchargement, plus généralement, est-il susceptible de générer des actions pouvant consommer beaucoup de ressources ? De manière générale, vous devriez désactiver systématiquement tout système de logs/stats/tracking incompatibles avec un environnement mutualisé.