Pas de vidage mémoire après les récentes mises à jour de systemd?

12

Lorsque j'exécute un programme sur lequel je travaille, il échoue avec le message suivant:

...
Aborted (core dumped)

Cependant, aucun vidage de mémoire n'est créé. Les vidages de mémoire ont été écrits précédemment, et je ne me souviens pas avoir changé quoi que ce soit à ce sujet.

Quand je cours ulimit -aje reviens,

$ ulimit -a
core file size          (blocks, -c) unlimited
...

Autres points,

  • J'ai vérifié que mon utilisateur peut créer des fichiers dans le répertoire courant.
  • J'ai lu /proc/sys/fs/suid_dumpable. Actuellement, il est réglé sur 0 sur ma machine. J'ai essayé de le changer en 1 ou 2 mais aucune différence.
  • J'ai également essayé d'exécuter le programme en tant que root, mais cela n'a pas fait de différence non plus.

Malheureusement, je ne me souviens pas quand j'ai pu produire le dernier core-dump réussi.

Philipp Claßen
la source

Réponses:

8

Depuis les documents coredump.conf,

Pour désactiver un fichier de configuration fourni par le fournisseur, la méthode recommandée consiste à placer un lien symbolique vers /dev/nulldans le répertoire de configuration de /etc/, avec le même nom de fichier que le fichier de configuration du fournisseur.

sudo ln -s /dev/null /etc/sysctl.d/coredump.conf
sudo systemd-sysctl 

Depuis systemd, les choses sont gérées différemment.

Schaiba
la source
Wow, tu as raison! Il n'y a pas longtemps, je suis passé à systemd. sudo systemd-coredumpctlaffiche tous les vidages mémoire manquants. Votre solution a fonctionné mais uniquement après un redémarrage du système.
Philipp Claßen
1
systemd« s systemd-sysctl.serviceseulement fonctionne sysctlau point approprié de démarrage et poignées réexécution la main sur les changements. Et n'allez pas créer / écraser des fichiers de configuration sans enquêter sur leur fonction et leur contenu.
vonbrand
1
Le fichier semble avoir été renommé 50-coredump.conf, afin d'appliquer les paramètres dans le démarrage actuel, j'ai dû exécuter modifier le paramètre sysctl manuellement, voir stackoverflow.com/q/2065912/427545 .
Lekensteyn
2
Pour restaurer la valeur par défaut, ne définissez pas une chaîne vide, utilisez-la à la place:sysctl -w kernel.core_pattern="core"
Lekensteyn
2

Vous souhaiterez peut-être utiliser la coredumpctlcommande pour récupérer votre vidage de mémoire ou exécuter gdb dessus. C'est la méthode «approuvée par le système» pour y faire face. : - /

Dans un certain sens, c'est plutôt bien que systemd capture toutes ces choses car il les effacera automatiquement après un certain temps, et cela facilite également le téléchargement de vidages sur incident pour les rapports de bogues.

Mais, ce fut un changement choquant avec peu de notification ou d'indices pour les personnes qui savaient comment les coredumps fonctionnaient avant que systemd ne soit impliqué. Même la suppression d'un fichier nommé 'core.pid.txt' avec des instructions pour utiliser coredumpctl pour obtenir votre coredump ainsi que la façon de désactiver la création des .txtfichiers aurait été d'une grande aide, même si celles-ci auraient également jonché le système de fichiers pendant un certain temps.

Très varié
la source