Tenho um trabalho inicial que ocasionalmente trava com uma falha de segmentação e tenho algumas perguntas sobre os dumps principais.
Primeiro, devo adicionar uma estrofe:
limit core unlimited unlimited
Existe uma desvantagem em permitir tamanhos de núcleo ilimitados? Um limite finito seria melhor?
Segundo, para onde irá o arquivo principal? Se o padrão não for um local padrão ou lógico, como faço para aparecer em outro lugar?
upstart
segmentation-fault
ulimit
brooks94
fonte
fonte
Respostas:
Despejos de núcleo ilimitados não são aconselháveis na maioria das situações, mas são tecnicamente corretos. Um dump principal possui apenas "toda a memória" do processo atual. Portanto, no máximo, só pode ser tão grande quanto o seu ram + swap. Espero que você tenha mais espaço livre do que isso.
Na vida real, eles devem ser "pequenos" em comparação com o total de ram + swap.
O arquivo "deve" acabar no "diretório atual". Para tarefas iniciantes que não chdir, geralmente é /. Se eles mudarem de diretório, você estará sozinho para procurá-los. No entanto, você pode codificar um caminho para eles.
Você deve poder verificar
/proc/sys/kernel/core_pattern
o "padrão". Se você definir o padrão para algo comoecho "/var/log/core" > /proc/sys/kernel/core_pattern
, todos os seus núcleos deverão terminar em / var / logfonte
Um arquivo principal é uma imagem de um processo criado pelo sistema operacional quando o processo é encerrado inesperadamente. Os arquivos principais são criados quando um programa se comporta incorretamente devido a um bug ou a uma violação dos mecanismos de proteção da CPU ou de memória. O sistema operacional mata o programa e cria o arquivo principal.
Esse arquivo pode ser muito útil para determinar o que deu errado com um processo. A produção dos arquivos principais pode ser ativada por padrão, dependendo da distribuição e versão do Linux que você possui.
Se você não deseja nenhum arquivo principal, defina "ulimit -c 0" nos arquivos de inicialização. Esse é o padrão em muitos sistemas; em
/etc/profile
você pode encontrarComo os arquivos truncados não são úteis, defina o tamanho do arquivo principal do Linux como "ilimitado".
O arquivo principal é colocado no diretório de trabalho atual do processo, sujeito a permissões de gravação para o processo da JVM e espaço livre em disco.
Dependendo do nível do kernel, está disponível uma opção útil do kernel que fornece nomes mais significativos aos arquivos principais. Como usuário root, a opção sysctl -w kernel.core_users_pid = 1 garante que os arquivos principais tenham um nome no formato "Core.PID".
Se você quiser arquivos principais, precisará redefinir isso por conta própria .bash_profile:
permitiria arquivos principais, mas os limitaria a 50.000 bytes.
Você tem mais controle dos arquivos principais no
/proc/sys/kernel/
Por exemplo, você pode eliminar os marcados no pid
Os arquivos principais serão então chamados de "núcleo". As pessoas fazem coisas assim para que um usuário possa optar por colocar um arquivo não gravável chamado "core" em diretórios nos quais não deseja gerar dumps principais. Pode ser um diretório (mkdir core) ou um arquivo (touch core; chmod 000 core).
Mas talvez o mais interessante seja o que você pode fazer:
Todos os corefiles são lançados no
/tmp/corefiles
(não altere core_uses_pid se você fizer isso).Teste isso com um script simples:
No Ubuntu, a criação dos arquivos principais é controlada pelo arquivo
/etc/default/collectd
. Você pode ativar a criação de core dumps configurando:Localizando o arquivo principal
Depois que o daemon travou, um arquivo será criado em seu diretório de trabalho atual. Por padrão, isto é
pkglocalstatedir
, ieprefix/var/lib/collectd
. Se você instalou um pacote, esse diretório é mais provável/var/lib/collectd
.Fontes: AP Lawrence e IBM
fonte