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

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

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

limit core unlimited unlimited

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

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

8
задан 17 May 2017 в 09:28

2 ответа

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

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

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

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

0
ответ дан 17 May 2017 в 09:28

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

Этот файл может быть очень полезен для определения того, что пошло не так с процессом. Создание основных файлов может быть включено по умолчанию, в зависимости от дистрибутива и версии 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

0
ответ дан 17 May 2017 в 09:28

Другие вопросы по тегам:

Похожие вопросы: