Aumentar o limite de arquivos abertos para todos os processos: Preciso definir limites de software / disco rígido?

1

Estou tentando corrigir o seguinte erro que recebo depois de um dia ou dois de execução do meu servidor de jogo.

2017/12/13 12:08:35 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 1s

Eu adicionei "fs.file-max = 2000000" ao /etc/sysctl.conf e executei

sysctl -w fs.file-max=2000000
sysctl -p

Meus limites globais agora estão atualizados (preciso reinicializar?), mas os limites de hardware e software ainda são 1024 e 4096, respectivamente.

Além disso, ao usar o seguinte comando para verificar "arquivos abertos" para usuário root:

su - root -c 'ulimit -aHS' -s '/bin/bash'

Estou recebendo 1024 também.

O que o limite soft e hard faz e eu preciso alterá-los para que os limites globais tenham algum efeito? E quanto ao limite do usuário (root)?

Obrigado!

    
por SJ19 13.12.2017 / 16:44

3 respostas

2

O limite definido com sysctl é uma configuração do sistema que se aplica a todo o sistema. Não é um limite que se aplica a processos individuais.

Cada processo pode ter mais de N arquivos abertos, onde N é o limite de NOFILE do processo, e pode alterar seu próprio limite flexível para não mais do que o limite máximo. Somente processos em execução como root podem aumentar seu limite rígido. Os processos herdam os limites de seus pais.

A maneira de alterar o limite de um único serviço (que é o que você deve fazer) depende do seu sistema init.

  • Para SysVinit (CentOS ≤6): edite o script de inicialização do serviço (normalmente localizado em /etc/rc.d/init.d ) para chamar ulimit antes de executar o daemon e reinicie o serviço.
  • Para Systemd (CentOS ≥7): edite o arquivo de unidade do serviço /etc/systemd/system/my_game_server.service e adicione uma diretiva

    LimitNOFILE=16384
    

    Em seguida, execute systemctl daemon-reload para recarregar a configuração e reinicie o serviço.

por 13.12.2017 / 17:06
1

Você pode alterar os limites em /etc/security/limits.conf . Faça o logout e a entrada para entrar em vigor.

Hardlimit: O limite para um determinado usuário - não pode ser criado por esse usuário durante o tempo de execução, apenas diminuído: ulimit -Hu 2000 . Lista de hardlimits: ulimit -Ha

Softlimit: Um limite "soft" dentro do hardlimit, pode ser alterado pelo usuário durante o tempo de execução: ulimit -Su 10000 .List of Softlimits: ulimit -Sa

Altere ulimits de um processo em execução: prlimit -p $$ --nproc=1200: . Isto irá mudar o número de processos (softlimit) para 1200 para o atual shell $$ .

    
por 13.12.2017 / 20:25
0

Você pode alterar o número de limites no arquivo /etc/security/limits.conf (para um usuário específico ou para todos) Você deve adicionar assim:

username               soft    nofile          4096
username               hard    nofile          5120

e isto irá definir o número de arquivos abertos para 4096 (soft limit) e 5120 como top

Após essa edição, você precisa relogar e restringir o (s) serviço (s) para que ele fique no comando.

Tanto quanto me lembro, ulimit fará alterações somente até você sair deste usuário

    
por 13.12.2017 / 16:53