Questão Aumentar o número máximo de descritores de arquivos abertos no Snow Leopard?


Eu estou tentando fazer algo que requer um grande número de descritores de arquivo

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

/ usr / bin / ulimit: linha 4: ulimit: arquivos abertos: não é possível modificar o limite: Argumento inválido.

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


95


origem


As respostas desta pergunta não funcionam mais no OSX Mavericks. - Howard
Corrida echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.conf e reiniciar funciona para mim em Mavericks. - user495470


Respostas:


Usando ulimit comando só altera os limites de recursos para o shell atual e seus filhos e sudo ulimit cria um shell de raiz, ajusta seus limites e, em seguida, sai (tendo, portanto, até onde eu posso ver, nenhum efeito real).
Para exceder 12288, você precisa ajustar o kernel kern.maxfiles e kern.maxfilesperproc parâmetros e também (pelo menos de acordo 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 esta permanente (ou seja, não redefinir quando você reiniciar), crie /etc/launchd.conf contendo:

limit maxfiles 1000000 1000000

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

Se isso não acontecer, você pode estar encontrando limites de tamanho no kernel. E se o seu modelo suporta, inicializando o kernel em Modo de 64 bits pode ajudar.


90



sudo launchctl limit maxfiles 1000000 unlimited Nem o limite rígido nem o limite para "maxfiles" podem ser ilimitados. Por favor, use um parâmetro numérico para ambos. - Thomas Hunter
Tenha cuidado ao adicionar essa linha a launchd.conf. Eu acho que se o número for muito pequeno, ele pode inutilizar seu computador. Por exemplo, eu usei limit maxfiles 1024 1024 e eu tive muita dificuldade em mudar isso de volta. - Shawn
Ai: "O arquivo /etc/launchd.conf não é mais consultado para subcomandos serem executados durante o tempo de inicialização antecipado; essa funcionalidade foi removida por questões de segurança." - Alice Purcell
Não funciona, o meu número fd não pode exceder 6k, mesmo se eu definir ulimit -Sn 10240 com sucesso. - Jian Weihang
@JianWeihang números fd são por processo, então eu assumo que outros processos tenham 4000 arquivos abertos. Por acaso você usa o Chrome? ;) - Trejkaz


O seguinte deve 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. Os maxfiles launchctl são limitados por sysctl maxfiles e portanto, não pode excedê-los
  4. sysctl parece herdar o kern.maxfilesperproc do launchctl maxfiles
  5. 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.

41



Ai: "O arquivo /etc/launchd.conf não é mais consultado para subcomandos serem executados durante o tempo de inicialização antecipado; essa funcionalidade foi removida por questões de segurança." - Alice Purcell


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 Dentro Library/LaunchDaemons criar um arquivo chamado limit.maxfiles.plist e cole o seguinte em (sinta-se livre para alterar os dois números (que são os limites flexíveis e rígidos, 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 Altere 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

28



Essa resposta é ótima, e eu encontrei algumas informações para adicionar aqui, @ninjaPixel: blog.dekstroza.io/ulimit-shenanigans-on-osx-el-capitan - Dean Radcliffe


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

20



Se um dos valores foi ilimitadousando -1 como valor resulta em 12288. É possível usar valores numéricos maiores, por ex. sudo launchctl limit maxfiles 15000 150000. Eu não tenho certeza se essas configurações têm um efeito, então. - Daniel Beck♦


No Mavericks é simples. Como usuário regular:

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

7



Considere revisar sua solução. Você está definindo um ulimit de 1024, mostrando os descritores de arquivo de saída como 8192 (deve ser 1024). Sua abordagem também é probelmática sem sudo, tente mudar algumas vezes para você. - y3sh
O sudo não deve ser usado aqui, mas esta resposta está incorreta. Usuários Mavericks devem usar echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.conf e, em seguida, reinicie sua máquina - Kyle Chadha


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

sudo launchctl limit maxfiles 100000 unlimited

Por favor, note que aplicar estes limites em /etc/launchd.conf (como sugerido em outras respostas) não é mais suportado nas versões recentes do macOS. Embora ainda possa usar launchd.plist (Vejo: man launchd.plist) como por usuário ou por todo o sistema plist arquivos de configuração como sugerido Aqui e .


Para tornar esses limites persistentes, você pode usar /etc/sysctl.conf arquivo e adicione 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 de ulimit no macOS?


0