coredumps não funcionam depois de habilitá-los em /etc/security/limits.conf no Debian

0

Eu tenho alguns scripts de inicialização que lançam alguns daemons que eu escrevi. Eu quero que o Linux gere um corump a qualquer momento que algo falhe. Eu ativei coredumps em /etc/security/limits.conf adicionando a próxima linha:

* hard core 100000

Após a reinicialização, eu corro ulimit -a e vejo que coredumps não estão ativados:

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

Primeiro, verifiquei se há algum script de arquivo no meu sistema que desative coredumps (greping ulimit -c 0 ), mas não encontrei nada até agora.

Depois, criei um programa falso c .. para verificar novamente se está funcionando, e posso confirmar que não está. O programa é este

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

Depois de executá-lo, nenhum coredump é gerado

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

Eu sei que o coredump funciona (e é ativado no kernel), porque depois de executar ulimit -c 100000 e repetir o teste acima, um coredump é gerado.

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

Estou realmente sem ideias. Alguma ajuda?

Obrigado em advanved !!

    
por sirlion 25.08.2011 / 22:05

2 respostas

0

Você precisa definir o soft core também. Existem dois conjuntos de limites. Na página do manual:

# 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.

Você pode simplesmente mudar 'hard' no seu limits.conf para '-' e isso deve ser corrigido. Ou você pode ser mais detalhado e adicionar uma linha específica para soft (talvez configurá-lo menor).

    
por 26.08.2011 / 02:49
0

/etc/security/limits.conf

  • ilimitado do núcleo macio
  • ilimitado do núcleo duro

ou

  • soft core 10000
  • núcleo duro 10000

NÃO funciona nos meus servidores Debian Squeeze.

Após a reinicialização: root @ sla: ~ # ulimit -c 0

Isso é irritante

: '(

root @ sla: ~ # sysctl kernel.core_pattern

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

ENCONTREI O PROBLEMA:

dentro de / etc / profile no final:

A linha abaixo define o limite flexível para interromper a criação de coredumps para

todos os usuários

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

substituí com:

ulimit -c unlimited > / dev / null 2 > & 1

E agora funciona: D

Pascal

    
por 15.07.2013 / 14:44