Файлы core linux что это

Использование дампов ядра для диагностики сбойных программ

Дампы ядра часто применяются для диагностики и поиска ошибок в Линуксовых и Юниксовых программах. Они помогут системному администратору выяснить, отчего рухнула та или иная программа, например, Lighttpd, Apache или PHP-CGI. Файл дампа ядра генерируется всякий раз, когда программа нештатно завершается из-за ошибки, нарушения политики безопасности операционной системы, попытки записывать данные вне отведенной ей области памяти и так далее. В этой статье рассказано, как подключить генерацию файлов дампов ядра и отслеживать с их помощью ошибки в программах.

Как подключить создание файлов дампа ядра

Как просмотреть текущие настройки файлов дампа ядра

Нулевой вывод команды означает, что файлы дампов не создаются.

Как изменить настройки

Как подключить генерацию файлов дампа ядра для рухнувших программ и ошибок сегментации

Найдите в /etc/profile строку

И измените ее, чтобы получилось:

Также следует внести изменения в файл /etc/sysctl.conf. В этот файл следует дописать три строки:

Не забудьте сохранить отредактированные файлы.

Что означают последние три записи?

    kernel.core_uses_pid = 1 ≈ добавляет к имени файла дампа номер PID процесса.

fs.suid_dumpable = 2 ≈ обеспечивает создание дампов ядра для программ с setuid битом.

kernel.core_pattern = /tmp/core-%e-%s-%u-%g-%p-%t ≈ Когда программа нештатно завершается, файл дампа появляется в директории /tmp. Благодаря параметру kernel.core_pattern, программа sysctl определяет конкретное имя файла дампа ядра. При помощи символа процента (%) могут быть заданы следующие значения:

  • %% ≈ одиночный символ %
  • %p ≈ PID дампируемого процесса
  • %u ≈ UID дампируемого процесса
  • %g ≈ GID дампируемого процесса
  • %s ≈ Номер сигнала, вызвавшего дампирование
  • %t ≈ время создания дампа (в секундах, с момента 0:00часов, 1 января 1970, то есть с условного момента создания ОС Юникс)
  • %h ≈ hostname (имя хоста), также как и ‘nodename’, возвращаемое командой uname(2)
  • %e ≈ имя исполняемого файла программы

Совершив все вышеописанные действия, запустите дампирование при помощи команды (Redhat и подобные дистрибутивы):

И запишите настройки в /etc/sysctl.conf при помощи следующей команды:

Как инициировать создание дампов ядра для конкретного демона

Например, для демона lighttped, в файл /etc/init.d/lighttped нужно добавить строку:

Сохраните файл. Затем перезапустите демон:

Правильный вывод последней команды:

Имейте в виду, что эта вышеприведенная строка является специфичной только для Redhat. Для всех остальных дистрибутивов конфигурацию прописывают строками:

Все, теперь можно отправлять дамп ядра разработчикам или распространителям программы.

Источник

Русские Блоги

linux: генерация и отладка файлов ядра

Когда программа завершается необычным образом в Linux, ядро ​​генерирует файл ядра (образ памяти с отладочной информацией) в текущем рабочем каталоге. Используйте gdb для просмотра файла ядра, вы можете указать файл и номер строки кода, вызвавшего ошибку программы.

Примечание: 1. Конечно, вы должны сначала предоставить информацию о GDB при компиляции.

1. Переключатель генерации основного файла и ограничение размера.

1.1 Использование ulimit -c Команда может просматривать переключатель генерации основного файла.

Если результат равен 0, это означает, что эта функция отключена и файл ядра не будет сгенерирован.

1.2 Использование ulimit -c filesize Command, вы можете ограничить размер основного файла (размер файла — килобайт).

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

Читайте также:  Linux не видит монитор через hdmi

Используйте следующую команду, чтобы запретить системе создавать файлы ядра:

Следующая команда может проверить, включена ли опция создания файла ядра:

Эта команда отобразит все пользовательские настройки, где параметр -a означает «все».

Примечание:
a) Команда ulimit действительна только для одного терминала после ее установки, поэтому ее необходимо сбрасывать после другого терминала.
б) Чтобы вступить в силу во всей системе, вы можете использовать следующие методы (конечно, этот метод может не работать и связан с версией Linux):
b.1) Отредактируйте файл /root/.bash_profile и добавьте в него: ulimit -S -c unlimited (Примечание: не во всех версиях системы есть этот файл (Suse Nothing ниже) , вы можете создать его вручную)
б.2) Перезагрузите систему или выполните: souce /root/.bash_profile
c) Использование команды ulimit см. в следующих разделах:http://www.groad.net/bbs/read.php?tid-1471.html

2. Имя и путь создания основного файла.

Путь создания основного файла: введите тот же путь, что и исполняемый файл для запуска команды. Если основной файл, сгенерированный системой, не имеет других имен расширений, все они называются core. Новое поколение файла ядра перезапишет исходный файл ядра.

2.1. / Proc / sys / kernel / core_uses_pid может определять, следует ли добавлять pid в качестве расширения к имени файла основного файла.

Содержимое файла равно 1, что означает добавление pid в качестве расширения, а сгенерированный формат файла ядра — core.xxxx; 0 означает, что сгенерированный файл ядра имеет такое же имя, как core.
Этот файл можно изменить с помощью следующей команды:

2.2 Файл / proc / sys / kernel / core_pattern или /etc/sysctl.conf может управлять местом хранения и форматом имени файла основного файла. Какая из них связана с версией системы и требует реального тестирования.
2.2.1 Измените / proc / sys / kernel / core_pattern, этот файл можно изменить с помощью следующей команды:

echo «/corefile/core-%e-%p-%t» > core_pattern , Основные файлы могут быть одинаково сгенерированы в каталоге / corefile, а имя сгенерированного файла — core-command name-pid-timestamp
Ниже приводится список параметров:
% p-вставить pid в имя файла добавить pid
% u — вставить текущий uid в имя файла добавить текущий uid
% g-вставить текущий gid в имя файла добавить текущий gid
Сигнал% s-insert, вызвавший дамп памяти в имя файла
% t — вставить время UNIX, когда был получен coredump, в имя файла
% h-вставить имя хоста, где был получен coredump, в имя файла Добавить имя хоста
% e-вставить имя исполняемого файла coredumping в имя файла Добавить имя команды

Примечание:
a) Файловая система каталога proc является псевдофайловой системой, которая предоставляет интерфейс для доступа к данным ядра системы в форме файловой системы. Содержимое каталога / proc создается автоматически при запуске системы, определенный файл записи может быть изменен, а определенный файл записи
Файл нельзя изменить. Например, вы можете точно настроить параметры ядра, изменив файл proc. Возможно, вы не сможете успешно отредактировать proc / sys / kernel / core_pattern с помощью vi, вы можете использовать только команду echo для изменения или команду sysctl для изменения. Команда sysctl выглядит следующим образом:

б) Даже если вы используете команду echo для его успешного изменения, вы не сможете успешно сгенерировать основной файл.Например, используемый centor5.4 установлен на виртуальной машине. Содержимое proc / sys / kernel / core_pattern:

Измените, как указано выше (echo «/ corefile / core-% e-% p-% t»> core_pattern), файл ядра даже больше не создается

2.2.2 Измените /etc/sysctl.conf (http://www.ms2006.com/archives/151 )

Добавьте путь, который необходимо сохранить, «kernel.core_pattern = /tmp/corefile/core.%e.%t». Следует отметить, что путь должен иметь разрешение на запись, иначе основной файл не будет сгенерирован. Затем выполните команду «sysctl -p», чтобы вступить в силу. Core_users_pid уже существует в файле sysctl по умолчанию и не нуждается в изменении.Pid по-прежнему является очень важной информацией.

Читайте также:  Linux как проверить http

Примечание:
a) Следует отметить, что если каталог / tmp / corefile не существует ранее, то сгенерированному файлу дампа ядра не будет места для хранения, поэтому убедитесь, что установленный каталог существует. заранее.

3. Создание условий для создания файла ядра.

Основной файл будет сгенерирован, когда программа получит следующие сигналы:

4. Отладка основного файла

4.1 Команды отладки *

Необходимо использовать основной файлgdbПриди и посмотри.

Используйте команду bt, чтобы узнать, где программа пошла не так.
Следующие два метода команды имеют одинаковый эффект, но не действуют в некоторых средах, поэтому рекомендуется использовать указанную выше команду.

4.2 Примеры

Напишите простую программу, чтобы увидеть, будет ли сгенерирован файл ядра. (http://blogger.org.cn/blog/more.asp?name=yach&id=22810)

Основной файл не найден, мы меняем настройку ulimit и даем ему возможность сгенерировать. 1024 выбирается случайным образом, если размер файла ядра превышает 1024 блока, он не будет сгенерирован.

Обратите внимание на вышеприведенную выходную информацию, еще одну (ядро выгружено). Основной файл действительно создается, а 9128 — это PID процесса. Давайте посмотрим на это ядро ​​с помощью GDB.

В настоящее время вы не можете увидеть обратную трассировку с bt, которая является стеком вызовов.Оказывается, GDB не знает, где находится информация о символе. Скажем это:

На этот раз вышел backtrace.

4.3 Используйте основной файл для отладки на плате разработки
http://blog.csdn.net/shaovey/article/details/2744487

Если операционная система платы разработки также является Linux, основной метод отладки все еще применим. Если плата разработки не поддерживает gdb, вы можете скопировать среду (зависимую библиотеку), исполняемые файлы и файлы ядра платы разработки в Linux на ПК.

Для отладки основного файла, сгенерированного на плате разработки на ПК, вам необходимо использовать gdb, который поставляется с кросс-компилятором, и вам необходимо указать переменные solib-absolute-prefix и solib-search-path в gdb, чтобы гарантировать что gdb может найти путь к исполняемой программе в зависимой библиотеке. Существует способ создать файл конфигурации.Вам не нужно настраивать указанные выше переменные каждый раз при запуске gdb, то есть создавать .gdbinit по пути к запускаемому gdb.

Содержимое файла конфигурации:

Примечание: для отладки исполняемого файла вам необходимо добавить -g при компиляции, чтобы основной файл мог нормально отображать сообщение об ошибке! Иногда основная информация очень велика, что превышает предел места на плате разработки, и сгенерированная основная информация будет неполной и непригодной для использования.Этого можно избежать, установив на ПК.

5. Приложение:

5.1 команда ulimit

1. Описание:
ulimit используется для ресурсов, занятых процессом запуска оболочки.

2. Категория:
Встроенные команды оболочки

3. Формат синтаксиса:

4. Введение в параметр:
-H Установить лимит аппаратных ресурсов.
-S Установить лимит ресурсов программного обеспечения.
-a Показать все текущие ограничения ресурсов.
-c size: установить максимальный размер основного файла. Unit: блоки
-d размер: установить максимальное значение сегмента данных. Единица измерения: килобайты.
-f size: установить максимальный размер создаваемого файла. Unit: блоки
-l size: установить максимальное значение процесса блокировки в памяти. Единица измерения: килобайты.
-m размер: установите максимальный размер резидентной памяти, который можно использовать. Единица измерения: килобайты
-n размер: установить максимальный размер файловых дескрипторов, которые ядро ​​может открывать одновременно. Единица: n
-p size: установить максимальное значение буфера конвейера. Единица измерения: килобайты.
-s size: установить максимальное значение стека. Единица измерения: килобайты.
-t size: установить максимальный верхний предел времени использования ЦП. Единица: секунды
-v size: установить максимальное значение виртуальной памяти. Единица: килобайты.

5. Простой пример:

При написании программы под Linux, если программа относительно велика, вы часто будете сталкиваться с такими проблемами, как «ошибка сегментации», главным образом из-за того, что начальный размер стека системы Linux слишком мал, обычно 10M. Я обычно устанавливаю размер стека на 256M, чтобы не было segfault! Команда такая:

Если вы хотите, чтобы система запомнила эту конфигурацию автоматически, отредактируйте файл / etc / profile, добавьте «ulimit -s 262140» в строку «ulimit -S -c 0> / dev / null 2> & 1», сохраните и перезапустите система.

Читайте также:  Microsoft office visio linux

1] В файле окружения RH8 / etc / profile мы можем увидеть, как система настраивает ulimit:

В этом предложении устанавливаются настройки для ресурсов программного обеспечения и размер основного файла.

2) Если мы хотим ограничить размер файла, создаваемого оболочкой, например:

Размер файла h составляет 150062 байта, а размер созданного файла, который мы установили, составляет 512 байтов x 100 блоков = 51200 байт. Конечно, система сгенерирует новый файл размером 51200 байт в соответствии с вашими настройками.

3] Вы можете установить ulimit, который хотите установить, в файл окружения / etc / profile, как в примере 1].
Цель
Установить или сообщить об ограничениях ресурсов пользователя.
Синтаксис

описание
Команда ulimit устанавливает или сообщает ограничения ресурсов пользовательского процесса, как определено в файле / etc / security / limits. Файл содержит следующие ограничения по умолчанию:

Когда в систему добавляется новый пользователь, эти значения используются как значения по умолчанию. При добавлении пользователей в систему указанные выше значения устанавливаются командой mkuser или изменяются командой chuser. Лимит делится на мягкий и жесткий. С помощью команды ulimit пользователь может изменить мягкий предел на максимальное значение настройки жесткого ограничения. Чтобы изменить жесткое ограничение ресурса, у вас должны быть полномочия пользователя root.

Многие системы не включают один или несколько из вышеперечисленных ограничений. Лимит конкретного ресурса устанавливается, когда указан параметр Limit. Значение параметра Limit может быть числом в указанной единице каждого ресурса или значением неограниченно. Чтобы установить для определенного ulimit значение unlimited, используйте слово unlimited.

Примечание:
Установка ограничения по умолчанию в файле / etc / security / limits означает установку ограничения ширины системы, а не только ограничения, требуемого пользователем при создании пользователя.

Если параметр Limit опущен, будет распечатан текущий лимит ресурсов. Если пользователь не укажет флаг -H, мягкий предел распечатывается. Когда пользователь указывает более одного ресурса, имя лимита и единица измерения печатаются перед значением. Если опция не указана, предполагается флаг -f.

Поскольку команда ulimit влияет на текущую среду оболочки, она будет предоставлена ​​как обычная встроенная команда оболочки. Если команда вызывается в независимой среде выполнения команд, это не влияет на ограничение размера файла в среде вызывающего. Так обстоит дело в следующем примере:

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

Дополнительную информацию о пользовательских и системных ограничениях ресурсов см. В подпрограммах getrlimit, setrlimit или vlimit в Техническом справочнике AIX 5L версии 5.3: BaseOperating System and Extensions Volume 1.

-a Перечислить все текущие ограничения ресурсов.
-c Укажите размер дампа ядра в блоках по 512 байт.
-d Укажите размер области данных в килобайтах.
-f Установить ограничение на размер файла (в блоках) при использовании параметра Limit или сообщить об ограничении размера файла, если параметр не указан. Значение по умолчанию — флаг -f.
-H Задает жесткое ограничение для данного ресурса. Если у пользователя есть полномочия пользователя root, жесткое ограничение может быть увеличено. Любой пользователь может снизить жесткий лимит.
-m Укажите размер физической памяти в килобайтах.
-n указывает предел количества файловых дескрипторов, которые может иметь процесс.
-s Укажите размер стека в килобайтах.
-S указывает мягкое ограничение для данного ресурса. Мягкий предел может быть увеличен до значения жесткого. Если не указаны ни флаги -H, ни -S, ограничение применяется к обоим.
-t указывает количество секунд, используемых каждым процессом.

Возвращаются следующие значения выхода:

0 Успешно завершено.
> 0 Запрос на более высокий предел отклонен или возникает ошибка.

Чтобы установить ограничение на размер файла до 51 200 байт, введите:

Источник

Оцените статью