O chpst respeita as configurações do ulimit?

O chpst respeita as configurações do ulimit?

No momento, estamos enfrentando problemas com um servidor baseado em JBoss em uma plataforma Linux - efetivamente, estamos ficando sem identificadores de arquivos disponíveis no processo e o servidor trava.

Definimos ulimit para permitir 10.000 identificadores de arquivos abertos, e o servidor trava consistentemente quando muito menos identificadores de arquivos estão abertos.

A única coisa que notei é que nossos scripts de inicialização usam chpst, e notei que chpst permite que você defina limites de arquivo/processo/memória como argumentos. Alguém sabe se o chpst respeita o ulimit do sistema existente se nenhum comando explícito for definido ou se ele usa seus próprios padrões internos? Se sim, onde eu encontraria isso?

obrigado

Responder1

chpst nem sequer respeita o que você passa como argumento. O código fonte é realmente difícil de ler, mas strace confirma:

execve("/usr/sbin/chpst", ["chpst", "-o", "10000", "/bin/sh", "-c", "sleep 5"], [/* 26 vars */]) = 0
...
getrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=4*1024}) = 0
setrlimit(RLIMIT_NOFILE, {rlim_cur=4*1024, rlim_max=4*1024}) = 0
execve("/bin/sh", ["/bin/sh", "-c", "sleep 5"], [/* 26 vars */]) = 0
...

eu evitaria.

Responder2

Não posso adicionar comentários a Olivier Tharan, e mesmo que esta seja uma questão antiga, acho que não é ruim corrigir afirmações erradas (especialmente se a afirmação for relativamente recente).

Em seu strace, getrlimit diz que o limite rígido máximo é 4.096 e pede ao chpst para definir o limite flexível para 10.000. chpst faz isso, mas conforme documentado emgerenciamento de limites.conf, os limites flexíveis não podem exceder os limites rígidos, que são aplicados pelo kernel e pelo usuário root. A única coisa que se poderia dizer sobre isso é que talvez o chpst devesse imprimir um aviso, só isso. Certamente não "eu evitaria".

Observe que isso significa que o problema original pode não estar relacionado ao chpst, mas à configuração do sistema. chpst é apenas uma ferramenta para definir limites arbitrários para um único processo, não é uma ferramenta para configurar kernels.

informação relacionada