Maison >Opération et maintenance >exploitation et maintenance Linux >Que faire si Linux ne génère pas de fichiers core
Solutions pour Linux qui ne génère pas de fichiers core : 1. Vérifiez si le répertoire de vidage du noyau existe et définissez le processus pour qu'il ait des autorisations d'écriture sur le répertoire ; 2. Vérifiez si le programme de service appelle seteuid(); Restrictions de taille de fichier ; 4. Modifier le profil, etc.
L'environnement d'exploitation de cet article : système linux5.9.8, ordinateur Dell G3.
Que dois-je faire si Linux ne génère pas de fichiers de base ? Pourquoi le fichier core n’est-il pas généré ?
1. Assurez-vous que le répertoire dans lequel le Core dump est stocké existe et que le processus dispose des autorisations d'écriture sur le répertoire.
Le répertoire où le Core dump est stocké est le répertoire actuel du processus, qui est généralement le répertoire où se trouvait le processus lorsque la commande a été émise pour démarrer le processus. Mais s'il est démarré via un script, celui-ci peut modifier le répertoire courant. Dans ce cas, le répertoire courant réel du processus sera différent du répertoire dans lequel le script a été initialement exécuté. À ce stade, vous pouvez afficher la cible du lien symbolique "/proc/277cd6bc5823f70298dd2fa0a1e5f686/cwd" pour déterminer l'adresse réelle du répertoire actuel du processus. Les processus démarrés via les services système peuvent également être visualisés via cette méthode.
2. Si le programme appelle seteuid()/setegid() pour changer l'utilisateur ou le groupe effectif du processus, le système ne générera pas de Core dump pour ces processus par défaut.
De nombreux programmes de service appelleront seteuid(), comme MySQL Quel que soit l'utilisateur que vous utilisez pour exécuter mysqld_safe pour démarrer MySQL, l'utilisateur effectif pour mysqld est toujours l'utilisateur msyql. Si vous avez initialement exécuté un programme en tant qu'utilisateur A, mais que l'utilisateur du programme que vous voyez dans PS est B, alors ces processus ont appelé seteuid. Afin de permettre à ces processus de générer Coredump, (echo "1" > /proc/sys/kernel/suid_dumpable) est requis.
3. Comme nous le savons tous, il s'agit de définir une limite de taille de fichier Core suffisamment grande.
La taille du fichier Core généré lorsque le programme plante est la taille de la mémoire occupée par le programme lors de son exécution. Cependant, le comportement lorsque le programme plante ne peut pas être estimé sur la base du comportement normal. Par exemple, des erreurs telles qu'un débordement de tampon peuvent entraîner la destruction de la pile. Par conséquent, la valeur d'une certaine variable est souvent modifiée en désordre, puis. le programme utilise cette taille pour demander de la mémoire. Cela peut amener le programme à occuper beaucoup plus de mémoire que d'habitude. Par conséquent, quel que soit le peu de mémoire occupée par le programme pendant le fonctionnement normal, il est préférable de s'assurer que le fichier Core est généré et que la limite de taille est définie sur illimitée.
4. Ajoutez :
ulimit -c unlimited > /dev/null 2?&1
à /etc/profile 5. Pour les programmes qui sont généralement démarrés sur la CLI, si vous définissez :
ulimit -c unlimited
, vous pouvez générer un fichier de vidage de mémoire lorsqu'il est terminé en dehors du programme. Mais pour les programmes exécutés en mode démon, la principale différence par rapport aux programmes démarrés par CLI est l'environnement d'exécution du processus, qui inclut
cwd (répertoire de travail actuel). Si vous définissez le format du fichier core dans un chemin relatif, par exemple, définissez /proc/sys/kernel/core_pattern comme :
core-%e-%p-%t
De manière générale, le cwd du fichier démon est /, vous pouvez passer /proc/< ;your_program_pid>/cwd Pour visualiser, connectez-vous généralement au répertoire /. Et si l'utilisateur ne dispose pas d'autorisations d'écriture sur ce répertoire, le fichier core dump ne sera pas généré.
La solution la plus directe consiste à modifier /proc/sys/kernel/core_pattern en chemin absolu : /data/coredump/core-%e-%p-%t
Et assurez-vous qu'il est fondamentalement OK.
Modifiez le format du fichier core dump dans le fichier /proc/sys/kernel/core_pattern en un chemin absolu, tel que :
/data/coredump/core-%e-%p-%t
Quand le fichier core ne sera-t-il pas généré ?
Le fichier principal ne sera pas généré dans les conditions suivantes :
(a) Le processus est settings-user-ID, et l'utilisateur actuel n'est pas le propriétaire du fichier programme ;
(b) Le processus est ; settings-group-ID et l'utilisateur actuel L'utilisateur n'est pas le propriétaire du groupe du fichier programme ;
(c) L'utilisateur n'a pas la permission d'écrire dans le répertoire de travail actuel
(d) Le fichier l'est également ; grand. Les autorisations du fichier principal (en supposant que le fichier n'existait pas auparavant) sont généralement la lecture/écriture par l'utilisateur, la lecture de groupe et toute autre lecture.
Apprentissage recommandé : "Tutoriel vidéo Linux"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!