У меня есть несколько сценариев инициализации, которые запускают некоторые демоны, которые я написал. Я хочу, чтобы Linux генерировал coredump каждый раз, когда происходит сбой. Я активировал coredumps в /etc/security/limits.conf, добавив следующую строку:

* hard core 100000

После перезагрузки я запускаю ulimit -a и вижу, что coredumps не активированы:

> root@computer:~# ulimit -a
> core file size          (blocks, -c) 0

Во-первых, я проверил, есть ли в моей системе какой-либо файловый скрипт, который деактивирует coredumps (greping ulimit -c 0 ), но пока ничего не нашел.

Затем я создал фиктивную программу c ... чтобы дважды проверить, работает ли она, и я могу подтвердить, что это не так. Программа такая

int main() {
  int *p;
  return *p;
}

После запуска coredump не генерируется

root@computer:~# ./a.out 
Segmentation fault

Я знаю, что coredump работает (и активируется в ядре), потому что после запуска ulimit -c 100000 и повторения теста выше генерируется coredump.

root@computer:~# ulimit -c 100000
root@computer:~# ./a.out 
Segmentation fault (core dumped)
root@computer:~# ls
a.out  core

У меня действительно нет идей. Любая помощь?

Спасибо в плюсе !!

2 ответа2

0

/etc/security/limits.conf

  • мягкое ядро неограниченно
  • жесткое ядро неограниченно

или же

  • мягкое ядро 10000
  • жесткое ядро 10000

НЕ работаю на моих серверах Debian Squeeze.

После перезагрузки: root @ sla: ~ # ulimit -c 0

Это раздражает

:'(

root @ sla:~ # sysctl kernel.core_pattern

kernel.core_pattern = /var/log/dumps/core.%t.%e.%p_%u-%g

Я НАШЕЛ ПРОБЛЕМУ:

внутри /etc /profile в конце:

Строка ниже устанавливает мягкий предел, чтобы остановить создание coredumps для

все пользователи

ulimit -S -c 0> /dev /null 2> & 1

Я заменил на:

ulimit -c неограниченно> /dev /null 2> & 1

И теперь это работает:D

паскаль

0

Вам нужно также установить мягкое ядро. Есть два набора ограничений. Со страницы руководства:

# cat /etc/debian_version 
6.0.1
# man limits.conf:

           <type>

               hard
                   for enforcing hard resource limits. These limits are set by the superuser and enforced by the Kernel. The user cannot raise his requirement of system resources above such values.

               soft
                   for enforcing soft resource limits. These limits are ones that the user can move up or down within the permitted range by any pre-existing hard limits. The values specified with this token can be
                   thought of as default values, for normal system usage.

               -
                   for enforcing both soft and hard resource limits together.

Вы можете просто изменить 'hard' в вашем limit.conf на '-', и это должно исправить это. Или вы можете быть более многословным и добавить определенную строку для soft (возможно, установив ее меньше).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .