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?
upstart
segmentation-fault
ulimit
ruisseaux94
la source
la source
Réponses:
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_pattern
le "motif". Si vous définissez le modèle sur quelque chose comme cela,echo "/var/log/core" > /proc/sys/kernel/core_pattern
tous vos cœurs devraient se retrouver dans / var / logla source
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/profile
vous 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é".
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".
Si vous voulez des fichiers de base, vous devez le réinitialiser dans votre propre .bash_profile:
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
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:
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:
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: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
-direprefix/var/lib/collectd
. Si vous avez installé un package, ce répertoire est très probablement/var/lib/collectd
.Sources: AP Lawrence et IBM
la source