Ulimit crescente no CentOS

18

Temos uma caixa do CentOS que estou tentando aumentar o número máximo de arquivos que um usuário pode abrir. Atualmente, quando corro ulimit -Sn, recebo 1024e ulimit -Hn4096. Preciso desse número por volta de 6000.

Em que /etc/sysctl.confeu coloquei fs.file-max = 100000. Em /etc/security/limits.confeu tenho o seguinte conjunto:

username soft nofile 6000
username hard nofile 65535

Eu desconectei e efetuei login novamente, usernamemas ainda não estou vendo minhas alterações. O que preciso para alterar esse valor?

Tudo o que tenho /etc/security/limits.dé 90-nproc.conf. Também garanti que o ulimit não esteja sendo chamado no meu .bash_profile ou .bashrc.

Quando executo, sysctl -pele cospe as configurações desejadas e mostra o valor fs.file-maxdesejado. Mas quando corro ulimit -Sn, recebo 1048. Se eu tentar correr sysctl --system, recebo error: Unknown parameter "--system".

tubaguy50035
fonte
Você tentou reiniciar? Tanto quanto sei, essas configurações são lidas durante a inicialização do sistema.
Kamil
Você não precisa de uma reinicialização para isso.
Xavier Lucas

Respostas:

14

Para forçar /etc/sysctl.confa ser lido novamente, corra sysctl -p.

O arquivo /etc/security/limits.confé lido pelos shells de login e você deve fechar as janelas das sessões ativas se estiver na GUI. Para logins remotos, entra em vigor no relog.

Xavier Lucas
fonte
11
Fiz isso, ainda não vendo alterações após um relog.
tubaguy50035
@ tubaguy50035 fs.file-maxé o número máximo de arquivos abertos no sistema. É um limite rígido e não será refletido pelas ulimitchamadas no seu caso.
Xavier Lucas
Ah, tudo bem. Não devo mais rodar em muitos arquivos abertos?
tubaguy50035
@ tubaguy50035 Não relacionado. É o limite rígido do sistema que substituirá qualquer número acima em limits.conf. Mas limits.conf ainda é o que é aplicado. Você poderia tentar definir os limites rígidos e flexíveis com ulimit diretamente em uma nova sessão e ver se obtém os mesmos máximos? Algo parece substituir sua configuração.
Xavier Lucas
Diz que a operação não é permitida. Preciso dar ao usuário acesso a alguma coisa? Prefiro que o usuário da web não tenha privilégios de root.
tubaguy50035
6

Como outro pôster disse, você precisa ter o sysctl definido o valor no kernel em execução. Existem várias maneiras de definir o valor sem reiniciar:

sysctl -p /etc/sysctl.conf
sysctl -w fs.file-max=100000
sysctl --system

IMHO, o último método é o melhor, pois replica a ordem em que as configurações seriam aplicadas durante a inicialização (e, se você tiver um conflito, isso se tornará aparente).

Nota: Não tenho certeza de qual versão do CentOS você está usando, mas pelo menos 7 encontrei um problema em que, se o dracut reconstruir o initramfs por qualquer motivo (como ao instalar um novo módulo do kernel), ele será copiado o conteúdo de /etc/sysctl.* no initramfs, que será executado pelo systemd-sysctl durante essa fase, mesmo que você exclua posteriormente essas entradas do /etc/sysctl.conf.

No meu ambiente, editei o módulo systemd dracut para excluir o /etc/sysctl.* desse ambiente (pois essas configurações serão definidas assim que o rootfs for montado e o systemd-sysctl for executado novamente). É apenas uma pegadinha que você pode encontrar.

Boscoe
fonte
Estou no CentOS 6.5. Também atualizei minha pergunta com resultados de alguns deles.
tubaguy50035