Инструменты пользователя

Инструменты сайта


poluchenie_core_dump_v_linux

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

poluchenie_core_dump_v_linux [2014/10/29 14:31]
poluchenie_core_dump_v_linux [2020/06/13 13:46] (текущий)
Строка 1: Строка 1:
 +====== Получение core dump в Linux ======
 +====== Проверка создания core dump ======
 +
 +Проверим создаются ли файлы core dump вообще (некоторые программы, например httpd, могут требовать индивидуальных настроек). Для этого создадим программу на [[zametki_po_jazyku_c|С++]] с ошибкой деления на ноль, что соответственно:) приводит к ошибке и в нашем случае создание файла core dump<file c test.c>
 +int a (int *p) {
 +    int y = *p;
 +    return y;
 +}
 +
 +int main (void) {
 +    int *p = 0; /* null pointer */
 +    return a (p);
 +}
 +</file>Компилируем<file>
 +$ gcc -o test test.c
 +</file>Запускаем<file>
 +$ ./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'
 +</file>
 +====== Как включить core dump? ======
 +Настройка производилась для [[CentOS]] 6.5 (Final) x86_64 с ядром [[OpenVZ]] 2.6.32-042stab093.5.
 +  * Добавим в /etc/sysctl.conf<file bash>
 +kernel.core_pattern = /tmp/core-%e-%s-%u-%g-%p-%t
 +fs.suid_dumpable = 2
 +kernel.core_uses_pid = 1
 +</file><file bash>
 +%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
 +</file>применим эти параметры без перезагрузки компьютера<file>
 +# sysctl -p
 +</file>
 +  * Отредактировать лимит для размера core файла (по умолчанию 0, то есть отключены, файл создаваться не будет). Редактируем файл с лимитами и указываем максимальный размер core файла, в нашем случае неограниченный размер(unlimited).<file>
 +# nano /etc/security/limits.conf
 +# Disable core file
 +#*            soft    core             0
 +# Enable core file
 +*            soft    core             unlimited
 +</file>Что бы не перегружать компьютер для применения файла limits.conf, можно применить их из командной строки:<file>
 +# ulimit -c unlimited
 +</file>
 +<note>Перезапустите интересующий вас процесс командой service и убедитесь в том, что параметры успешно применились, командой <file>
 +cat /proc/`pgrep process_name`/limits
 +</file></note>
 +
 +  * Описанного набора действий бывает не всегда достаточно. В частности, если SysV скрипт использует функцию daemon(), описанную в /etc/rc.d/init.d/functions, то заданный ранее явно лимит переопределяется следующей строкой<file>
 +corelimit="ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0}"
 +</file>дополнительно определяем<file>
 +# nano /etc/sysconfig/init
 +DAEMON_COREFILE_LIMIT=unlimited
 +</file>
 +<note important>Для контейнеров [[OpenVZ]] - параметр DAEMON_COREFILE_LIMIT должен быть определен в каждой требуемой VE, в отличии от других параметров, которых достаточно определить только в HN.</note>