Do segfaults * sempre * tenta despejar o núcleo?

2

Temos um daemon interno rodando em algumas caixas RHEL 5 que periodicamente segregam. Nossos desenvolvedores querem um arquivo principal para ajudar com a depuração, mas não posso provocá-lo a produzir um.

$ sudo grep segfault /var/log/messages.1
Aug 11 21:04:13 pal108 kernel: brokend[28692]: segfault at 00000000000000a8
rip 00000031d020f908 rsp 00007fff9c60f3f0 error 4

O daemon é iniciado usando daemon de /etc/init.d/functions , portanto, adicionando

DAEMON_COREFILE_LIMIT=unlimited

ao seu arquivo sysconfig deve definir ulimit de acordo. Este parece ser o caso, de acordo com procfs :

$ sudo grep core /proc/$(cat /var/run/brokend.pid)/limits
Max core file size        unlimited            unlimited            bytes  

E o padrão do arquivo principal aponta para um local que existe:

$ cat /proc/sys/kernel/core_pattern
"/tmp/core_%p_%e_%t"

No entanto, ainda não produzirá um arquivo principal. Alguma idéia do que poderia estar impedindo isso? Um segfault sempre significa que o sistema operacional tentará produzir um arquivo principal ou ele depende de alguma codificação específica do aplicativo para fazer isso?

    
por markdrayton 16.08.2010 / 11:14

2 respostas

3

O daemon é setuid? Processos setuid não despejam arquivos principais por padrão.

Execute sysctl fs.suid_dumpable=1 para ativar dumps setuid.

    
por 16.08.2010 / 20:21
0

Sim, coredumps sempre são escritos quando um sinal é enviado para o processo que produz um núcleo f.e .:

   ABRT       6   core
   FPE        8   core
   ILL        4   core
   QUIT       3   core
   SEGV      11   core
   TRAP       5   core
   SYS            core      might not be implemented
   EMT            core      might not be implemented
   BUS            core      core dump might fail
   XCPU           core      core dump might fail
   XFSZ           core      core dump might fail
    ulimit deve ser definido (como você já mencionou). como eu não sei redhat tanto assim, gostaria de verificar se o ulimit sob o usuário que você está executando o deamon está configurado para. eu colocaria apenas um

    echo -n "ulimit: "
    ulimit -c
    echo -n "For id: "
    id -u
    echo
    

    no script para testá-lo.

    Confira "man core", há um código de exemplo para testar o recurso do coredump. Pelo menos sob o debian existe.

        
por 16.08.2010 / 12:32