2011-06-27 10:56:47 +0000 2011-06-27 10:56:47 +0000
102
102

Aumentar o número máximo de descritores de ficheiros abertos em Snow Leopard?

Estou a tentar fazer algo que requer um grande número de descritores de ficheiros

sudo ulimit -n 12288 é tão alto quanto o Leopardo de Neve quer ir; para além disto resulta em

/usr/bin/ulimit: linha 4: ulimit: ficheiros abertos: não pode modificar o limite: argumento inválido.

Quero aumentar o número muito mais alto, digamos 100000. Será possível?

Respostas (4)

95
95
95
2011-06-27 21:17:50 +0000

Usando o comando ulimit apenas altera os limites de recursos para a concha actual e seus filhos e sudo ulimit cria uma concha de raiz, ajusta os seus limites, e depois sai (tendo assim, tanto quanto posso ver, nenhum efeito real).
Para ultrapassar 12288, é necessário ajustar os parâmetros kern.maxfiles e kern.maxfilesperproc do kernel, e também (pelo menos de acordo com esta entrada no blog , que é um resumo de esta discussão ) um limite de lançamento. Pode usar launchctl limit para ajustar todos de uma só vez:

sudo launchctl limit maxfiles 1000000 1000000

Para tornar isto permanente (isto é, não reiniciar quando reiniciar), crie /etc/launchd.conf contendo:

limit maxfiles 1000000 1000000

Então pode usar ulimit (mas sem o sudo) para ajustar o limite do seu processo.

Se isto não o fizer, pode estar a correr para limites de tamanho no núcleo. Se o seu modelo o suporta , iniciar o kernel em 64-bit mode pode ajudar.

42
42
42
2012-12-03 12:07:46 +0000

A maioria das soluções (e estão listadas por ordem hierárquica) devem ser resolvidas da seguinte forma:

echo 'kern.maxfiles=20480' | sudo tee -a /etc/sysctl.conf
echo -e 'limit maxfiles 8192 20480\nlimit maxproc 1000 2000' | sudo tee -a /etc/launchd.conf
echo 'ulimit -n 4096' | sudo tee -a /etc/profile

Notas:

  1. terá de reiniciar para que estas alterações entrem em vigor.
  2. AFAIK já não pode definir limites para ‘ilimitado’ sob OS X
  3. os ficheiros máximos de lançamento são limitados pelos ficheiros máximos sysctl, e portanto não pode ultrapassá-los
  4. a sysctl parece herdar kern.maxfilesperproc dos ficheiros máximos de lançamento
  5. ulimit parece herdar o valor ‘open files’ de launchctl por defeito
  6. pode definir um ulimit personalizado dentro de /etc/profile, ou ~/.profile ; embora isto não seja necessário, eu forneci um exemplo
  7. Seja cauteloso ao definir qualquer um destes valores para um número muito alto quando comparado com o seu padrão - as características existem estabilidade/segurança. Tomei estes números de exemplo que acredito serem razoáveis, escritos noutros websites.
20
20
20
2011-12-10 10:11:12 +0000

Parece que o OS X Lion não permitirá “ilimitado” como valor:

% sudo launchctl limit maxfiles 8192 unlimited
Neither the hard nor soft limit for "maxfiles" can be unlimited. Please use a numeric parameter for both.
``` ```
% sudo launchctl limit maxfiles 4096 8192

Fornecer valores numéricos tanto para o limite suave como para o limite duro faz o trabalho:

0x1&

3
3
3
2018-12-21 14:43:27 +0000

Em OS X 10.13.6 isto funciona para mim:

$ sysctl kern.maxfiles
kern.maxfiles: 12288
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 10240
$ sudo sysctl -w kern.maxfiles=1048600
kern.maxfiles: 12288 -> 1048600
$ sudo sysctl -w kern.maxfilesperproc=1048576
kern.maxfilesperproc: 10240 -> 1048576
$ ulimit -S -n
256
$ ulimit -S -n 1048576
$ ulimit -S -n
1048576