Получение core dump в Linux
Проверка создания core dump
Проверим создаются ли файлы core dump вообще (некоторые программы, например httpd, могут требовать индивидуальных настроек). Для этого создадим программу на С++ с ошибкой деления на ноль, что соответственно:) приводит к ошибке и в нашем случае создание файла core dump
- test.c
int a (int *p) { int y = *p; return y; } int main (void) { int *p = 0; /* null pointer */ return a (p); }
Компилируем
$ gcc -o test test.c
Запускаем
$ ./test Segmentation fault (core dumped) $ file /tmp/core-test-11-0-0-22601-1414579274 /tmp/core-test-11-0-0-22601-1414579274: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from './test'
Как включить core dump?
Настройка производилась для CentOS теперь CentOS Stream 6.5 (Final) x86_64 с ядром Установка и использование OpenVZ в 2023 2.6.32-042stab093.5.
- Добавим в /etc/sysctl.conf
kernel.core_pattern = /tmp/core-%e-%s-%u-%g-%p-%t fs.suid_dumpable = 2 kernel.core_uses_pid = 1
%e is the file name %g is GID processes running under %p is the process PID %s is a signal caused the dump % is a time of occurrence %u is a UID process runs
применим эти параметры без перезагрузки компьютера
# sysctl -p
- Отредактировать лимит для размера core файла (по умолчанию 0, то есть отключены, файл создаваться не будет). Редактируем файл с лимитами и указываем максимальный размер core файла, в нашем случае неограниченный размер(unlimited).
# nano /etc/security/limits.conf # Disable core file #* soft core 0 # Enable core file * soft core unlimited
Что бы не перегружать компьютер для применения файла limits.conf, можно применить их из командной строки:
# ulimit -c unlimited
Перезапустите интересующий вас процесс командой service и убедитесь в том, что параметры успешно применились, командой
cat /proc/`pgrep process_name`/limits
- Описанного набора действий бывает не всегда достаточно. В частности, если SysV скрипт использует функцию daemon(), описанную в /etc/rc.d/init.d/functions, то заданный ранее явно лимит переопределяется следующей строкой
corelimit="ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0}"
дополнительно определяем
# nano /etc/sysconfig/init DAEMON_COREFILE_LIMIT=unlimited
Для контейнеров Установка и использование OpenVZ в 2023 - параметр DAEMON_COREFILE_LIMIT должен быть определен в каждой требуемой VE, в отличии от других параметров, которых достаточно определить только в HN.


