O limite de Openfiles diminui automaticamente ao passar 2 ^ 21, Ubuntu 16.04

1

Eu notei um comportamento estranho ao tentar definir limites rígidos e flexíveis de nofile em relação ao meu usuário (o que obviamente tem sudo privileges).

Meu limite geral do sistema é 2 ^ 22 e tentei fazer o seguinte mesmo depois de configurá-lo para 2 ^ 23.

Consegui definir perfeitamente os limites de soft e hard até 2 ^ 20, sem quaisquer problemas. (o que significa que depois de os provar usando ulimit -Sn,and -Hn , obtenho os valores que acabei de definir).

Quando eu os configuro para 2 ^ 21 ou superior, depois que relogar o usuário (para aplicar as alterações), o limite rígido e o limite flexível são ambos reduzidos para 4096 e 1024, respectivamente.

Não consigo encontrar nada on-line sobre isso, e suspeito que tenha algo a ver com os tipos de variáveis que são usadas para armazenar esses valores (pessoalmente eu esperaria que estivesse em algum lugar em torno de 2 ^ 32 ou até mesmo 2 ^ 33 se eles forem definidos como uint , mas definitivamente não é o caso).

    
por GoldenSpecOps 14.03.2017 / 22:21

1 resposta

0

Parece haver dois limites para todo o sistema, documentados em Documentation / sysctl / fs.txt

  • fs.file-max é o número máximo de arquivos abertos (filehandles) em todo o sistema.
  • fs.nr_open é o limite superior global para o número de arquivos abertos por processo e limita o valor de RLIMIT_NOFILE , que é o que ulimit -n define. Não é novidade que o padrão seja 1024 * 1024 ou 2 ^ 20.

Então:

# sysctl fs.nr_open
fs.nr_open = 1048576
# ulimit -Hn 1048577
-su: ulimit: open files: cannot modify limit: Operation not permitted
# sysctl fs.nr_open=$[ 2**22 ] 
fs.nr_open = 4194304
# ulimit -Hn 4000000            # now it can be set

Mas file-max não parece impedir a configuração do limite por processo, eu defini isso o tempo todo:

# sysctl fs.file-max
fs.file-max = 262144

Então, o que quer que esteja definindo seus limites ( pam_limits.so ?), provavelmente está ficando e ignorando o erro na chamada do sistema devido ao limite definido pelo sysctl. Ou talvez ele registre um erro em algum lugar, verifique seus registros.

    
por 14.03.2017 / 23:39

Tags