comportamento estranho com ulimit no Mac OS X 10.6

8

Eu obtenho um comportamento muito estranho ao trabalhar com o ulimit. Eu apenas abro um novo shell

Hector:~ robertj$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited 
open files                      (-n) 256 
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 532
virtual memory          (kbytes, -v) unlimited

Ok, esse parece ser o padrão, mesmo que eu ajuste o limite de arquivos dentro do /etc/launchd.conf para ser unlimit. Mas essa é outra questão para outro dia.

Agora eu aumento o número de arquivos para 1024 e dou uma olhada nas novas configurações novamente.

 Hector:~ robertj$ ulimit -n 1024
 Hector:~ robertj$ ulimit -a | grep open
 open files                      (-n) 1024

Ok, isso funciona. legal! Agora vamos alterar as configurações novamente

Hector:~ robertj$ ulimit -n 512
Hector:~ robertj$ ulimit -a | grep open
open files                      (-n) 512

Mais uma vez, tudo funciona bem. Vamos mudar novamente para algum valor mais alto

Hector:~ robertj$ ulimit -n 1024
-bash: ulimit: open files: cannot modify limit: Operation not permitted
Hector:~ robertj$ 

Qual é o problema agora?

Se eu tentar sudo isso, eu não recebo um erro, mas o valor também não é alterado.

Hector:~ robertj$ sudo ulimit -n 1024
Password:
Hector:~ robertj$ ulimit -a | grep open
open files                      (-n) 512
Hector:~ robertj$ 

O que está acontecendo aqui?

Estou completamente perplexo!

Qualquer ajuda é muito apreciada ...

Robertj

    
por robertj 09.07.2011 / 14:07

1 resposta

17

Há duas coisas confundindo você. A primeira é que existem limites rígidos e flexíveis para cada recurso. ulimit -n 512 define ambos deles, mas ulimit -a mostra apenas o limite flexível. Quando o limite rígido for definido, só pode ser diminuído.

$ ulimit -n
256
$ ulimit -Hn  # There's no initial hard limit
unlimited
$ ulimit -n 512  # This sets both the hard and soft limits
$ ulimit -n
512
$ ulimit -Hn
512
$ ulimit -n 1024  # Once set, the hard limit cannot be increased
-bash: ulimit: open files: cannot modify limit: Operation not permitted

A segunda coisa que está te confundindo é que sudo ulimit não faz o que você acha que faz. Ele gera um subprocesso (raiz), define os limites de arquivos abertos para esse subprocesso e, em seguida, sai do subprocesso. Os limites são uma configuração por processo, portanto, fazer uma alteração neles não faz nada útil.

    
por 09.07.2011 / 19:58