Comment obtenir un vidage de mémoire d'Apache lors d'une erreur de segmentation


13

J'ai suivi des instructions de nombreux endroits en ligne sur la façon d'obtenir un vidage de mémoire d'Apache lorsqu'il produit un défaut de segmentation, mais il refuse toujours de générer le vidage.

J'ai:

  1. Ajout de la CoreDumpDirectorydirective dans le httpd.conffichier et définissez-la sur/tmp
  2. Réalisé ulimit -c unlimited
  3. A fourni le modèle pour les vidages en utilisant echo '/tmp/core-%e.%p' > /proc/sys/kernel/core_pattern
  4. Aussi couru echo 0 > /proc/sys/kernel/core_uses_pid

Httpd a été redémarré, mais toujours aucun vidage créé.

J'utilise CentOS 5.8 x64 avec httpd-2.2.3-65.el5.centos.3etphp-5.3.20-13.el5.art

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


Apache a-t-il la permission d'écrire dans le fichier que vous avez spécifié dans la directive CoreDumpDirectory? Il devrait appartenir à apache.
Valentin Bajrami

Je l'ai défini sur / tmp qui est accessible en écriture, mais je vais essayer ailleurs et lui donner la propriété d'apache
chrismcb

Merci - cela a produit un vidage, mais pas à l'endroit où je l'ai placé! Je mis le CoreDumpDirectoryà /tmp/dumpset largué à /tmp... maintenant avec le débogage
chrismcb

Je suis content que vous l'aillez compris!
Valentin Bajrami

Réponses:


7

Ma réponse est la suivante:

  1. Configurez la directive comme suit

    CoreDumpDirectory /tmp/mycoredump

  2. Créez le répertoire:

    mkdir -p /tmp/mycoredump

  3. Attribuer la propriété au répertoire www-data ou httpd

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

  4. Définissez les autorisations sur:

    chmod 777 /tmp/mycoredump

  5. Redémarrez Apache:

    service apache2 restart


Oui, je l'ai fait à peu près, mais ça a fini par se déverser de /tmptoute façon!
chrismcb

6
Ce n'est jamais une bonne idée de chmod 777quoi que ce soit
sendmoreinfo

1
@sendmoreinfo Mais que se passe-t-il si votre cas d'utilisation crée quelque chose de entièrement modifiable et exécutable pour le monde extérieur? ;-)
avgvstvs

8
Vous êtes autorisé à vous tirer une balle dans le pied, ne prêchez pas cela.
sendmoreinfo

0

Notez que si vous avez PrivateTmp=truedéfini votre /usr/lib/systemd/system/apache2.service(ou quel que soit son nom sur votre système), ce qui signifie qu'Apache recherche réellement à l' /tmpintérieur de quelque chose comme /tmp/systemd-private-c27fc5b152d546159d675e170641529b-apache2.service-IcEt0m/, Apache ne pourra pas écrire dans ce répertoire et vous ne recevrez pas de cœurs du tout (en raison dans le systemdrépertoire tmp ayant 700 perms root uniquement).

La solution consiste à définir PrivateTmp=falseou à modifier l'autorisation du répertoire systemd tmp après le démarrage du serveur.

J'ai perdu des heures là-dessus pour me rendre compte à peine du problème.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.