web-dev-qa-db-fra.com

Comment obtenir un butée de noyau d'Apache quand segfaulting

J'ai suivi des instructions de nombreux endroits en ligne sur la façon d'obtenir un vidage de base d'Apache lorsqu'il produise un Segfault, mais il refuse toujours de générer le décharge.

J'ai:

  1. A ajouté la directive CoreDumpDirectory dans le httpd.conf Fichier et définissez-le sur /tmp
  2. Réalisé ulimit -c unlimited
  3. Fourni le modèle pour les décharges en utilisant echo '/tmp/core-%e.%p' > /proc/sys/kernel/core_pattern
  4. Également couru echo 0 > /proc/sys/kernel/core_uses_pid

Httpd a été redémarré, mais aucun déchargement n'a été créé.

Je cours Centos 5.8 x64 avec httpd-2.2.3-65.el5.centos.3 et php-5.3.20-13.el5.art

Toute aide serait très appréciée!

13
chrismcb

Ma réponse est la suivante:

  1. Configurez la directive comme suit

    CoreDumpDirectory /tmp/mycoredump

  2. Créer le répertoire:

    mkdir -p /tmp/mycoredump

  3. Attribuer la propriété à l'annuaire www-Data ou httpd

    chown -R www-data:www-data /tmp/mycoredump

  4. Définir les autorisations à:

    chmod 777 /tmp/mycoredump

  5. Redémarrez Apache:

    service Apache2 restart

7
Valentin Bajrami

Notez que si vous avez PrivateTmp=true défini dans votre /usr/lib/systemd/system/Apache2.service (ou quoi que ce soit appelé votre système), signification Apache cherche réellement /tmp à l'intérieur de quelque chose comme /tmp/systemd-private-c27fc5b152d546159d675e170641529b-Apache2.service-IcEt0m/, Apache ne sera pas capable d'écrire sur cette Dir et vous n'obtiendrez pas de nœuds du tout (en raison du répertoire systemd TMP ayant 700 permanentes de racines).

La solution est de définir PrivateTmp=false ou modifier l'autorisation du répertoire SystemD TMP après le démarrage du serveur.

J'ai gaspillé des heures à ce sujet pour seulement tout simplement réaliser que le problème était.

0