Como alterar os limites máximos do arquivo em um processo

1

Sim, eu sei que esta pergunta foi feita antes e tentei todas as soluções que vi e nenhuma delas funciona para mim. Estamos executando o Ubuntu 12, e temos um processo que é automaticamente iniciado pela upstart toda vez que a máquina é inicializada. Eu entrei no /etc/security/limits.conf e adicionei estas linhas:

*                hard    nofile          65000
*                soft    nofile          32000
root             hard    nofile          65000
root             soft    nofile          32000

Eu também entrei no /etc/pam.d/common-session e adicionei esta linha:

session required        pam_limits.so

Para fazer isso funcionar em processos não interativos, eu também entrei no /etc/pam.d/common-session-noninteractive e adicionei a mesma linha exata.

Quando eu faço o login como nosso usuário adminstrator (que está na lista sudo, e eu chamarei esse usuário de SUDOUSER), vejo que os limites agora são 32000 como esperado quando faço um ulimit -a.

Então eu faço uma reinicialização de toda a máquina, para ter certeza de que os limites se aplicam a novos processos, como o processo que é iniciado pelo upstart após a reinicialização.

No entanto, após a reinicialização, quando observo o processo persistente iniciado no tempo de execução, obtenho a ID do processo (digamos 12345) e, em seguida, faço cat / proc / 12345 / limits e vejo que os limites ainda são os padrões ( 1024 soft, 4096 hard).

Então, o que estou fazendo de errado?

    
por Marc 04.12.2015 / 18:31

1 resposta

1

OK, encontrei a solução. Acontece que o upstart ignora todos os limites em pam.d e limits.conf. A maneira de fazer isso no upstart é definir explicitamente os limites no script conf upstart para o processo. Então, suponha que o processo seja myproc e você tenha um arquivo /etc/init/myconf.conf. Dentro desse script, basta incluir essa linha em algum lugar perto do topo:

limit nofile 32000 65000

Certifique-se de que esta linha está sozinha - ela NÃO é colocada dentro de script ou script de pré-inicialização, etc. - é uma linha principal (ou "stanza") por si só.

Agora basta reiniciar o processo e ver os limites com cat / proc / 12345 / limits

    
por 04.12.2015 / 18:35