Eu tenho um processo de longa duração que está atingindo um limite de recursos, como o número máximo de arquivos abertos.
Eu não quero matá-lo.
Normalmente, você faria:
(stop service)
ulimit -n <new limit>
(start service)
Existe uma maneira de evitar ter que parar e iniciar o serviço e aumentar os limites?
Eu descobri.
Em alguns kernels (por exemplo, 2.6.32+), pelo menos no CentOS/RHEL, você pode alterar os limites de recursos de um processo em execução usando
/proc/<pid>/limits
, por exemplo:Para alterar o máximo de arquivos abertos para um limite flexível de 4096, limite rígido de 8192:
Isto dá:
Observe o
-n
inecho -n
- sem isso, você receberá uminvalid argument
erro " ".O acima nem sempre funciona, então
Outra opção é
prlimit
o comando, introduzido comutil-linux 2.21
permite ler e alterar os limites dos processos em execução.Esta é uma continuação do writable
/proc/<pid>/limits
, que não foi integrado no kernel principal. Esta solução deve funcionar.Defina os limites:
Confirme: