De repente, meu serviço postgresql começou a falhar por algum motivo. Eu queria gerar um arquivo coredump, mas o arquivo não está sendo gerado.
Eu configurei: "ulimit -S -c unlimited", também adicionei a linha "*soft core unlimited" em /etc/security/limits.conf.
Também configurei meu diretório de destino para kernel.core_pattern="/coredumps/core-%e-%s-%u-%g-%p-%t". Também executei "chmod 777" para o caminho de destino para eliminar problemas de permissão. Consegui gerar um arquivo coredump de teste executando "perl -MPOSIX -e '$0="ttt"; pause' &" e então executando "kill -ABRT " e o arquivo foi salvo em /coredumps com o nome de arquivo correto.
Quando meu postgres trava, posso ver nos logs:
Limites de recursos desabilitam o despejo de núcleo para o processo 3607766 (postmaster).
O processo 3607766 (postmaster) do usuário 26 despejou o núcleo.
[email protected] : Bem-sucedido.
Também notei diferença entre saídas de "cat /proc/pid/limits" entre meu processo de teste e o postgres. O processo de teste tem "Tamanho máximo do arquivo do núcleo" definido como "ilimitado" e o valor do postgresql "0"
Os limites não são para todo o sistema – eles são por processo, inicializados e herdados, semelhantes às variáveis de ambiente.
ulimit
Portanto, seu comando só aumenta o limite de coredump para a instância Bash na qual você está inserindo esse comando – não para mais ninguém e nem para nenhum serviço.Os limites são inicializados em /etc/security/limits.conf para logins de usuários; no entanto, no Linux, os serviços não passam pelo procedimento de "login de usuário", mesmo que tenham uma conta de serviço, portanto, a inicialização do limite em /etc/security não ocorrerá.
Em vez disso, todos esses limites precisam ser definidos por meio do gerenciador de serviços que inicia o Postgres – neste caso, o systemd, então você precisa usar
systemctl edit
para adicionar aLimitCORE=
opção ao arquivo .service.Como alternativa, você pode usar o
prlimit
comando para alterar os limites de recursos de um processo já em execução, supondo que ele ainda possa ser executado por um curto período antes de travar.