5 votes

mod_fcgid : erreurs de délai de lecture des données

J'ai déménagé sur un serveur non géré qui utilise fcgid (avant j'utilisais mod_php), et dans les journaux d'erreurs je vois des tonnes d'erreurs de ce type :

[Mon Apr 23 21:17:12 2012] [warn] [client 66.249.68.233] mod_fcgid : délai de lecture des données dans 31 secondes [Mon Apr 23 21:17:12 2012] [error] [client 66.249.68.233] Fin prématurée des en-têtes script : index.php

[Mon Apr 23 17:59:51 2012] [warn] [client 74.117.180.58] mod_fcgid : délai de lecture des données dans 31 secondes [Mon Apr 23 17:59:51 2012] [warn] [client 74.117.180.58] (110)Connexion interrompue : mod_fcgid : ap_pass_brigade a échoué dans la fonction handle_request_ipc

Il semble y en avoir plus lorsque la charge est plus élevée (2-3) pendant les sauvegardes, et j'ai même réussi à reproduire cela pendant une charge de 3 lorsque tar / mysqldump était en cours d'exécution pendant une sauvegarde (l'utilisateur voit un message d'erreur 500 au bout de 30 secondes). Le serveur pourrait-il être surchargé ? Cette question semble être liée PHP + Fcgid se bloque si le téléchargement est interrompu mais pas les mêmes.

Il s'agit d'un serveur de premier ordre, et je suis surpris que ce soit trop. Voici quelques spécifications : 6-7 sites Drupal avec Webmin

  • Intel® Core™ i7-2600 Quadcore avec technologie Hyper-Threading
  • RAM 16 GB DDR3 RAM
  • Disques durs2 x 3 TB SATA 6 Gb/s HDD 7200 rpm (Software-RAID 1)
  • NIC1 Gbit OnBoard connecté à 100 Mbit

5voto

SebiF Points 498

Ces erreurs signifient que les scripts tournaient depuis plus de 31 secondes et qu'ils ont donc été interrompus, comme l'indique votre fichier fcgid.conf. Le délai standard est de 40 secondes.

Vous pouvez facilement vérifier ce comportement en écrivant un test.php :

<?php sleep(32); ?>

Vous devriez obtenir une erreur 500 et enregistrer cette erreur dans vos journaux.

Vous avez deux possibilités pour résoudre ce problème :

  1. Refaites votre index.php (ou l'application derrière) et résolvez les problèmes potentiels de boucle (où le script s'exécute indéfiniment et se termine au bout de 31 secondes).
  2. Augmenter les délais d'attente. Cela doit être fait pour chaque serveur virtuel (n'oubliez pas SSL !), car ce paramètre est modifié à chaque fois qu'un autre serveur virtuel est chargé et restera en place jusqu'à ce que le processus engendré meure.
    Le plus simple est de modifier /etc/apache2/mods-available/fcgid.conf . C'est ce que nous utilisons :

    IdleTimeout 3600
    ProcessLifeTime 7200
    IPCConnectTimeout 8
    IPCCommTimeout 600
    BusyTimeout 300

Edit : Oh, la deuxième erreur est liée à des chaînes de requête trop longues dans les URL. Pour autoriser des chaînes de requête plus longues, modifiez également fcgid.conf et insérer

MaxRequestLen 15728640

N'oubliez pas de redémarrer apache pour tuer tous les processus en cours, afin qu'ils reçoivent les nouvelles configurations.

2voto

Antoine Combes Points 423

Par défaut, mysqldump verrouille en écriture la base de données pendant son exécution, afin que les données ne soient pas modifiées pendant la sauvegarde, ce qui peut entraîner une corruption. Drupal écrit dans la base de données à chaque requête, donc les requêtes seront bloquées pendant que mysqldump est en cours d'exécution, et finiront par expirer.

Si vous utilisez InnoDB (ou si vous pouvez le convertir), vous pouvez utiliser Percona XtraBackup pour effectuer des sauvegardes à chaud. En résumé, n'utilisez pas mysqldump pour tar ou gzip ; vidangez le fichier .sql et exécutez tar/gzip dessus une fois que mysqldump a terminé (et libéré le verrou).

Sachez également que dans certaines versions de fcgid, il y a un bogue qui fait qu'il n'est pas pris en compte dans le calcul de l'impôt. d'appliquer uniquement les paramètres des blocs VirtualHost et d'appliquer globalement ceux du dernier bloc lu .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X