Получение 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.
PQ VPS сервера в 28+ странах.