Como aumentar o limite máximo de FD para um processo daemon sendo executado em um usuário sem cabeça?

5

Para aumentar o limite de FD para um processo de daemon em execução em um usuário sem cabeça em uma máquina Ubuntu Linux, fizemos as seguintes alterações em /etc/security/limits.conf

soft nofile 10000
hard nofile 10000

Também adicionamos a sessão requerida pam_limits.so em /etc/pam.d/login. As alterações foram refletidas para todos os usuários que efetuaram logout e logon novamente. Quaisquer que sejam os novos processos iniciados sob esses usuários, estamos obtendo novos limites de FD.

Mas, para o daemon que está sendo executado em um usuário sem cabeça, as alterações não estão sendo refletidas. Qual é a maneira pela qual as alterações podem ser refletidas para o daemon que está sendo executado em usuário sem cabeça?

    
por Ameliorator 28.12.2012 / 16:28

4 respostas

3

O problema estava no script de inicialização do daemon. Ele estava usando o setuidgid para executar o daemon sob o usuário headless.Parece que o setuidgid não instalará os limites de recursos que estão definidos no limits.conf ao mudar o usuário / grupo para o processo. Um daemon deve cuidar da configuração de limites de recursos para si mesmo por meio de seus scripts de inicialização. Definindo limites máximos de FD para a sessão atual no script de inicialização, os novos limites foram refletidos para o daemon. Isso foi feito inserindo-se uma linha ulimit -n como abaixo no script de lançamento do daemon.

ulimit -n $NEW_MAX_LIMIT
exec setuidgid userxyz /pat/to/daemon.sh
    
por 30.12.2012 / 10:16
2

Você pode ler / definir os limites de recursos de um processo em execução com o prlimit (1), parte do util-linux:

sudo prlimit --pid PID --nofile 8192:16384
    
por 25.02.2015 / 14:50
0

A reinicialização definitivamente cuidará disso. Mas suponho que você queira evitar isso. (quem não faz?)

Então você vai precisar do HUP no processo init. Quase sempre é executado no PID 1, mas você pode querer verificar novamente em seu sistema. Isso não é exatamente a coisa mais segura a se fazer, mas pode evitar essa reinicialização. Então, por favor, tente isso em uma caixa de teste primeiro:

kill -HUP 1

    
por 28.12.2012 / 16:45
-1

Você pode definir os limites de um processo em execução usando procfs.

Encontre o ID do processo que você deseja alterar (nesse caso, 1234) e execute:

pid=1234        # This is the process ID, found with 'ps'.
h_nofile=16384  # hard limit of "Max open files"
s_nofile=8192   # soft limit of "Max open files"
grep "Max open files" /proc/$pid/limits
echo -n "Max open files=$s_nofile:$h_nofile" > /proc/$pid/limits
grep "Max open files" /proc/$pid/limits

Este método não é mais suportado pelo kernel recente. A alternativa é usar prlimit como @nous estava mencionando.

    
por 09.09.2013 / 18:32