Inconvénient d'une taille de noyau illimitée? Où vont les fichiers principaux?


8

J'ai un travail parvenu qui se bloque parfois avec un défaut de segmentation, et j'ai quelques questions sur les vidages de mémoire.

Dois-je d'abord ajouter une strophe:

limit core unlimited unlimited

Y a-t-il un inconvénient à autoriser des tailles de noyau illimitées? Une limite finie serait-elle meilleure?

Deuxièmement, où ira le fichier principal? Si la valeur par défaut n'est pas un emplacement standard ou logique, comment puis-je le faire apparaître ailleurs?


voulez-vous s'il vous plaît nous mettre à jour avec votre travail parvenu
Qasim

Réponses:


6

Les vidages de mémoire illimités ne sont pas recommandés dans la plupart des situations, mais ils sont techniquement corrects. Un vidage de mémoire n'a que "toute la mémoire" du processus en cours. Donc, tout au plus, il ne peut être aussi grand que votre RAM + swap. J'espère que vous avez plus d'espace libre que cela.

Dans la vraie vie, ils devraient être «petits» par rapport au nombre total de RAM + swap.

Le fichier "devrait" se retrouver dans "le répertoire courant". Pour les tâches parvenues qui ne chdir qui est généralement /. S'ils changent de répertoire, alors vous êtes seul pour les traquer. Vous pouvez cependant coder en dur un chemin pour eux.

Vous devriez pouvoir vérifier /proc/sys/kernel/core_patternle "motif". Si vous définissez le modèle sur quelque chose comme cela, echo "/var/log/core" > /proc/sys/kernel/core_patterntous vos cœurs devraient se retrouver dans / var / log


5

Un fichier core est une image d'un processus qui est créé par le système d'exploitation lorsque le processus se termine de façon inattendue. Les fichiers de base sont créés lorsqu'un programme se comporte mal en raison d'un bogue ou d'une violation des mécanismes de protection du processeur ou de la mémoire. Le système d'exploitation tue le programme et crée le fichier principal.

Ce fichier peut être très utile pour déterminer ce qui n'a pas fonctionné avec un processus. La production des fichiers de base peut être activée par défaut, selon la distribution et la version de Linux que vous possédez.

Si vous ne voulez pas du tout de fichiers de base, définissez "ulimit -c 0" dans vos fichiers de démarrage. C'est la valeur par défaut sur de nombreux systèmes; en /etc/profilevous pouvez trouver

Étant donné que les fichiers tronqués ne sont d'aucune utilité pratique, définissez la taille du fichier noyau Linux sur "illimité".

Usage of ulimit         Action
ulimit -c               # check the current corefile limit
ulimit -c 0             # turn off corefiles
ulimit -c x             # set the maximum corefile size to x number of 1024bytes
ulimit -c unlimited     # turn on corefiles with unlimited size
ulimit -n unlimited     # allows an unlimited number of open file descriptors
ulimit -p               # size of pipes
ulimit -s               # maximum native stack size for a process
ulimit -u               # number of user processes
help ulimit             #list of other options

Le fichier principal est placé dans le répertoire de travail actuel du processus, sous réserve des autorisations d'écriture pour le processus JVM et de l'espace disque libre.

Selon le niveau du noyau, une option de noyau utile est disponible qui donne aux fichiers core des noms plus significatifs. En tant qu'utilisateur root, l'option sysctl -w kernel.core_users_pid = 1 garantit que les fichiers core ont un nom de la forme "Core.PID".

ulimit -S -c 0 > /dev/null 2>&1

Si vous voulez des fichiers de base, vous devez le réinitialiser dans votre propre .bash_profile:

ulimit -c 50000

autoriserait les fichiers principaux mais les limiterait à 50 000 octets.

Vous avez plus de contrôle sur les fichiers principaux dans /proc/sys/kernel/

Par exemple, vous pouvez éliminer le tag sur pid en

echo "0" > /proc/sys/kernel/core_uses_pid 

Les fichiers core seront alors simplement nommés "core". Les gens font des choses comme ça pour qu'un utilisateur puisse choisir de placer un fichier non accessible en écriture nommé "core" dans des répertoires où il ne veut pas générer de vidages mémoire. Ce pourrait être un répertoire (mkdir core) ou un fichier (touch core; chmod 000 core).

Mais peut-être plus intéressant est que vous pouvez faire:

mkdir /tmp/corefiles 
chmod 777 /tmp/corefiles 
echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern 

Tous les corefiles sont ensuite lancés /tmp/corefiles(ne changez pas core_uses_pid si vous faites cela).

Testez cela avec un script simple:

# script that dumps core 
kill -s SIGSEGV $$ 

Sous Ubuntu, la création de fichiers principaux est contrôlée via le fichier /etc/default/collectd. Vous pouvez activer la création de vidages mémoire en définissant:

ENABLE_COREFILES=1

Localisation du fichier principal

Une fois le démon tombé en panne, un fichier sera créé dans son répertoire de travail actuel. Par défaut, c'est-à pkglocalstatedir-dire prefix/var/lib/collectd. Si vous avez installé un package, ce répertoire est très probablement /var/lib/collectd.

Sources: AP Lawrence et IBM

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.