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 -Hndá 4096. 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".


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.


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.


Estou no CentOS 6.5. Também atualizei minha pergunta com resultados de alguns deles.
— tubaguy50035
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.