У меня есть выскочка, которая иногда дает сбой из-за ошибки сегментации, и у меня есть несколько вопросов о дампах ядра.
Во-первых, я должен добавить строфу:
limit core unlimited unlimited
Есть ли недостатки в разрешении неограниченных размеров ядра? Будет ли конечный предел лучше?
Во-вторых, куда пойдет основной файл? Если по умолчанию это не стандартное или логичное место, как мне сделать так, чтобы оно отображалось где-то еще?
Неограниченные дампы ядра в большинстве ситуаций не рекомендуются, но технически исправны. Дамп ядра имеет только «всю память», имеющуюся у текущего процесса. Так что, самое большее, он может быть таким же большим, как твой оперативная память + своп. Надеюсь, у вас будет больше свободного места, чем это.
В реальной жизни они должны быть «мелкими» по сравнению с тотальным бараном + своп.
Файл «должен» оказаться в «текущем каталоге». Для выскочки задач, которые не чдир это обычно /. Если они меняют каталог, то вы сами можете их выследить. Однако вы можете жестко указать путь для них.
Вы должны быть в состоянии проверить /proc/sys/kernel/core_pattern
«шаблон». Если вы установите шаблон как что-то вроде echo "/var/log/core" > /proc/sys/kernel/core_pattern
, тогда все ваши ядра должны оказаться в / var / log
Файл ядра - это образ процесса, который создается операционной системой, когда процесс неожиданно завершается. Основные файлы создаются, когда программа ведет себя плохо из-за ошибки или нарушения работы процессора или механизмов защиты памяти. Операционная система убивает программу и создает файл ядра.
Этот файл может быть очень полезен для определения того, что пошло не так с процессом. Создание основных файлов может быть включено по умолчанию, в зависимости от дистрибутива и версии Linux, которая у вас есть.
Если вам вообще не нужны файлы ядра, установите «ulimit -c 0» в ваших файлах запуска. Это значение по умолчанию во многих системах; в /etc/profile
вы можете найти
Поскольку усеченные файлы бесполезны, установите размер файла ядра Linux на «unlimited».
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
Файл ядра помещается в текущий рабочий каталог процесса с учетом разрешений на запись для процесса JVM и свободного дискового пространства.
В зависимости от уровня ядра, доступна полезная опция ядра, которая дает файлам ядра более значимые имена. От имени пользователя root опция sysctl -w kernel.core_users_pid = 1 гарантирует, что файлы ядра имеют имя в форме «Core.PID».
ulimit -S -c 0 > /dev/null 2>&1
Если вам действительно нужны файлы ядра, вам нужно сбросить их в своем собственном файле .bash_profile:
ulimit -c 50000
разрешит файлы ядра, но ограничит их до 50 000 байтов.
Вы можете лучше контролировать основные файлы в /proc/sys/kernel/
Например, вы можете исключить теги pid с помощью
echo "0" > /proc/sys/kernel/core_uses_pid
Файлы ядра будут называться «core». ». Люди делают такие вещи, чтобы пользователь мог поместить не записываемый файл с именем «core» в каталоги, где он не хочет создавать дампы ядра. Это может быть каталог (ядро mkdir) или файл (сенсорное ядро; ядро chmod 000).
Но, возможно, более интересным является то, что вы можете сделать:
mkdir /tmp/corefiles
chmod 777 /tmp/corefiles
echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern
Затем все core-файлы будут брошены в /tmp/corefiles
(не меняйте core_uses_pid, если вы это делаете).
Проверьте это с помощью простого скрипта:
# script that dumps core
kill -s SIGSEGV $
В Ubuntu создание файлов ядра контролируется с помощью файла /etc/default/collectd
. Вы можете включить создание дампов ядра, установив:
ENABLE_COREFILES=1
Расположение файла ядра
После сбоя демона файл будет создан в его текущем рабочем каталоге. По умолчанию это pkglocalstatedir
, то есть prefix/var/lib/collectd
. Если вы установили пакет, этот каталог, скорее всего, /var/lib/collectd
.
Источники: А. П. Лоуренс и IBM sup>