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

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


poluchenie_core_dump_v_linux

Различия

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

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

poluchenie_core_dump_v_linux [2014/10/29 07:31] (текущий)
Строка 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>​
  
загрузка...
poluchenie_core_dump_v_linux.txt · Последние изменения: 2014/10/29 07:31 (внешнее изменение)