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 encontrar
Como os arquivos truncados não são úteis, defina o tamanho do arquivo principal do Linux como "ilimitado".
Usage of ulimit Action
ulimit -c # check the current corefile limit
ulimit -c 0 # turn off corefiles
ulimit -c x # set the maximum corefile size to x number of 1024bytes
ulimit -c unlimited # turn on corefiles with unlimited size
ulimit -n unlimited # allows an unlimited number of open file descriptors
ulimit -p # size of pipes
ulimit -s # maximum native stack size for a process
ulimit -u # number of user processes
help ulimit #list of other options
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".
ulimit -S -c 0 > /dev/null 2>&1
Se você quiser arquivos principais, precisará redefinir isso por conta própria .bash_profile:
ulimit -c 50000
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
echo "0" > /proc/sys/kernel/core_uses_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:
mkdir /tmp/corefiles
chmod 777 /tmp/corefiles
echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern
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:
# script that dumps core
kill -s SIGSEGV $$
No Ubuntu, a criação dos arquivos principais é controlada pelo arquivo /etc/default/collectd
. Você pode ativar a criação de core dumps configurando:
ENABLE_COREFILES=1
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
, ie prefix/var/lib/collectd
. Se você instalou um pacote, esse diretório é mais provável /var/lib/collectd
.
Fontes: AP Lawrence e IBM