Недостаток неограниченного размера ядра? Куда идут файлы ядра?

8

У меня есть выскочка, которая иногда дает сбой из-за ошибки сегментации, и у меня есть несколько вопросов о дампах ядра.

Во-первых, я должен добавить строфу:

limit core unlimited unlimited

Есть ли минус в разрешении неограниченных размеров ядра? Будет ли конечный предел лучше?

Во-вторых, куда пойдет файл ядра? Если по умолчанию это не стандартное или логичное место, как мне сделать так, чтобы оно появилось где-то еще?

brooks94
источник
Не могли бы вы сообщить нам о своей новой работе
Qasim

Ответы:

6

Неограниченные дампы ядра не рекомендуется в большинстве ситуаций, но технически исправны. Дамп ядра имеет только «всю память», имеющуюся у текущего процесса. Так что, самое большее, он может быть таким же большим, как твой оперативная память + своп. Надеюсь, у вас будет больше свободного места, чем это.

В реальной жизни они должны быть "маленькими" по сравнению с тотальной оперативной памятью + свопом.

Файл "должен" в конечном итоге в "текущем каталоге". Для выскочки задач, которые не чдир это обычно /. Если они меняют каталог, то вы сами можете их выследить. Однако вы можете жестко указать путь для них.

Вы должны быть в состоянии проверить /proc/sys/kernel/core_patternвозможность «шаблона». Если вы установите шаблон как-то так, echo "/var/log/core" > /proc/sys/kernel/core_patternто все ваши ядра должны оказаться в / var / log

coteyr
источник
5

Основной файл - это образ процесса, который создается операционной системой, когда процесс неожиданно завершается. Основные файлы создаются, когда программа ведет себя неправильно из-за ошибки или нарушения работы процессора или механизмов защиты памяти. Операционная система убивает программу и создает файл ядра.

Этот файл может быть очень полезен для определения того, что пошло не так с процессом. Создание основных файлов может быть включено по умолчанию, в зависимости от дистрибутива и версии Linux, которая у вас есть.

Если вам вообще не нужны основные файлы, установите «ulimit -c 0» в ваших файлах запуска. Это значение по умолчанию во многих системах; в /etc/profileвы можете найти

Поскольку усеченные файлы бесполезны, установите размер основного файла Linux на «неограниченный».

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 

Все /tmp/corefilescore-файлы затем будут брошены (не меняйте 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

Митч
источник