Eu tenho um servidor redhat 7.9 com cerca de 30 usuários, 64 núcleos e 512 Go de RAM. Eu tenho vários processos de zumbis, não sei exatamente o que o usuário criou para criá-los, mas tenho a sensação, depois de ler coisas na internet, que quando a sessão deles for encerrada, todos os zumbis serão mortos porque o processo "pai" será eliminado.
então vamos imaginar que se um usuário criar cerca de 30 zumbis durante sua sessão, eu poderia ter no máximo 900 processos de zumbis, é apenas uma aproximação porque quanto mais durar a sessão de um usuário, maior será o número do processo de zumbi. Preciso monitorar esse número para evitar falha no servidor ou algo assim?
Eu sei que processos zumbis não consomem nenhum recurso (RAM, CPU, etc.) mas também é uma evidência de que esse valor não pode ser superior a um limite...
Eu sei também que às vezes o usuário desconecta e os processos zumbis são limpos, então o número de processos zumbis pode diminuir ...
Não, você certamente não precisa monitorá-los.
Essa é a resposta curta. Embora “zumbi” possa soar como algo meio perigoso que poderia invadir seu sistema e causar todo tipo de problema, esse não é o caso. Um processo "zumbi" não é mais um processo, então não há como "matá-los" (nem mesmo o SIGKILL fará alguma coisa). O processo já está morto há muito tempo e todos os seus recursos foram liberados. Um "zumbi" é apenas uma entrada de espaço reservado na tabela de processos, evitando que o ID do processo seja reutilizado e armazenando o status de saída do processo inativo.
Tal entrada será removida quando alguém chamar uma das
wait*()
syscalls no PID para recuperar o status de saída ("colher" o PID). Isso normalmente é o que o pai faria imediatamente, então a maioria dos zumbis fica por perto apenas por milissegundos, mas às vezes o pai se esquece de fazer isso por algum motivo, deixando você com um zumbi de longa vida. Se o pai sair (é o seu usuário efetuando logout), os zumbis serão reparados no processo init (PID 1 ou um processo diferente com a mesma função), que colherá imediatamente tudo o que vir, limpando o zumbi.A quantidade de memória consumida por uma entrada PID zumbi é trivial (dezenas de bytes), portanto nunca se tornará um problema em nenhum sistema não incorporado. Você precisaria de bilhões de zumbis para consumir uma fração significativa de sua RAM. Portanto, sua única preocupação real é possivelmente esgotar o fornecimento de IDs de processos, caso todos acabem sendo monopolizados por zumbis. O limite atual de PIDs pode ser visualizado e alterado
/proc/sys/kernel/pid_max
e é definido para pelo menos 1.024 vezes o número de núcleos ou 32.768, o que for maior. Você pode aumentá-lo arbitrariamente escrevendo nesse arquivo, até um máximo de pouco mais de 4 milhões.Portanto, se o seu sistema está atualmente configurado para o máximo padrão de 65.536 PIDs e você está preocupado com dezenas de milhares de zumbis esgotando isso, basta aumentar o limite. Para fazer isso, crie um arquivo chamado
/etc/sysctl.d/somenameyoulike.conf
contendokernel.pid_max = 1000000
(ajuste o valor conforme desejado). Vejaman sysctl.d
para detalhes.