Aumenta o número máximo de descritores de arquivos abertos no Snow Leopard?

96

Estou tentando fazer algo que requer um grande número de descritores de arquivos

sudo ulimit -n 12288 é tão alto quanto o Snow Leopard quer ir; além disso resulta em

/usr/bin/ulimit: line 4: ulimit: open files: cannot modify limit: Invalid argument.

Eu quero aumentar o número muito mais alto, digamos 100000. É possível?

    
por Chris Poole 27.06.2011 / 12:56

6 respostas

90

Usar o comando ulimit apenas altera os limites de recursos para o shell atual e seus filhos e sudo ulimit cria um shell raiz, ajusta seus limites e, em seguida, sai (tendo, portanto, até onde eu vejo, nenhum efeito real ).
Para exceder 12288, você precisa ajustar os parâmetros kern.maxfiles e kern.maxfilesperproc do kernel, e também (pelo menos de acordo com esta entrada de blog , que é um resumo de esta discussão ), um limite de lançamento. Você pode usar launchctl limit para ajustar todos de uma vez:

sudo launchctl limit maxfiles 1000000 1000000

Para tornar isso permanente (isto é, não redefinir quando você reinicializar), crie /etc/launchd.conf contendo:

limit maxfiles 1000000 1000000

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

Se isso não acontecer, você pode estar encontrando limites de tamanho no kernel. Se o seu modelo for compatível com , inicializando o kernel em modo de 64 bits pode ajudar.

    
por 27.06.2011 / 23:17
41

Os itens a seguir devem resolver a maioria das soluções (e estão listadas em ordem de hierarquia):

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. Você precisará reiniciar para que essas alterações entrem em vigor.
  2. AFAIK, você não pode mais definir limites para 'ilimitado' no OS X
  3. launchctl maxfiles são limitados por sysctl maxfiles e portanto, não pode excedê-los
  4. sysctl parece herdar o kern.maxfilesperproc do launchctl maxfiles
  5. o ulimit parece herdar seu valor de 'arquivos abertos' launchctl por padrão
  6. você pode definir um ulimit personalizado em / etc / profile ou ~ / .profile; enquanto isso não é necessário, eu forneci um exemplo
  7. Seja cauteloso ao definir qualquer um desses valores para um número muito alto quando comparado com o padrão - os recursos existem estabilidade / segurança. Tomei estes números de exemplo que acredito serem razoáveis, escritos em outros sites.
por 03.12.2012 / 13:07
28

Parece que existe um método completamente diferente para alterar o limite de arquivos abertos para cada versão do OS X!

Para o OS X Sierra (10.12.X) você precisa:

1. Em Library/LaunchDaemons , crie um arquivo chamado limit.maxfiles.plist e cole o seguinte (sinta-se livre para alterar os dois números (que são os limites flexível e rígido, respectivamente):

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">  
  <dict>
    <key>Label</key>
    <string>limit.maxfiles</string>
    <key>ProgramArguments</key>
    <array>
      <string>launchctl</string>
      <string>limit</string>
      <string>maxfiles</string>
      <string>64000</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist> 

2. Alterar o proprietário do seu novo arquivo:

sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist

3. Carregue estas novas configurações:

sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist

4. Por fim, verifique se os limites estão corretos:

launchctl limit maxfiles
    
por 24.01.2017 / 15:50
20

Parece que o OS X Lion não permitirá "ilimitado" como um 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.

Fornecer valores numéricos para o limite flexível e o limite rígido faz o trabalho:

% sudo launchctl limit maxfiles 4096 8192
    
por 10.12.2011 / 11:11
7

No Mavericks, é simples. Como usuário comum:

ulimit -n 8192

Você pode verificar as configurações atualizadas via

ulimit -a

Na minha máquina:

ulimit -a
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       709
-n: file descriptors                8192
    
por 04.09.2014 / 17:44
0

Alguns limites não podem ser alterados por ulimit , porque eles só se aplicam ao shell atual, portanto o comando launchctl deve ser usado para alterar os limites globalmente, por exemplo

sudo launchctl limit maxfiles 100000 unlimited

Observe que a aplicação desses limites em /etc/launchd.conf (como sugerido em outras respostas) não é mais suportada nas versões recentes do macOS. Embora ainda possa usar launchd.plist (consulte: man launchd.plist ), como arquivos de configuração plist por usuário ou por sistema, conforme sugerido aqui e .

Para tornar esses limites persistentes, você pode usar o arquivo /etc/sysctl.conf e adicionar, por exemplo:

kern.maxprocperuid=1000
kern.maxproc=2000
kern.maxfilesperproc=20000
kern.maxfiles=50000

Para que as alterações tenham efeito, é necessário reinicializar.

Para ver os limites atuais, execute: launchctl limit ou sysctl -a | grep ^kern.max .

Veja também: Como manter as configurações do ulimit no macOS?

    
por 29.07.2017 / 15:27