Existe uma correção para o erro “Muitos arquivos abertos no sistema” no OS X 10.7.1?

Existe uma correção para o erro “Muitos arquivos abertos no sistema” no OS X 10.7.1?

Preciso me livrar do incômodo limite "Muitos arquivos abertos no sistema" no OS X 10.7.1. 

Há algum caminho?

Responder1

De acordo comeste artigo útil(que recomendo ler):

Por padrão, o número máximo de arquivos que o Mac OS X pode abrir é definido como 12.288 e o número máximo de arquivos que um determinado processo pode abrir é 10.240.

Você pode verificar isso com:

  • sysctl kern.maxfiles
  • sysctl kern.maxfilesperproc

Você pode aumentar os limites (por sua conta e risco) com:

  • sysctl -w kern.maxfiles=20480(ou qualquer número que você escolher)
  • sysctl -w kern.maxfilesperproc=18000(ou qualquer número que você escolher)

Para tornar a alteração permanente, use sudopara inserir suas configurações /etc/sysctl.conf(que você pode ter que criar), assim:

kern.maxfiles=20480
kern.maxfilesperproc=18000

Nota: No OS X 10.10 ou inferior, você pode adicionar configurações /etc/launchd.confsemelhantes limit maxfilese elas substituirão tudo o que você colocar aqui.

Novamente, do artigo:

Depois de fazer isso, o próprio kernel terá um número máximo de arquivos, mas o shell talvez não. E como a maioria dos processos que ocuparão tantos arquivos serão iniciados pelo shell, você vai querer aumentar isso.

O comando para isso é:

ulimit -S -n 2048 # or whatever number you choose

Essa mudança também é temporária; dura apenas a sessão atual do shell. Você pode adicioná-lo ao seu arquivo de configuração do shell ( .bashrcou .zshrcqualquer outro) se quiser que ele seja executado sempre que você abrir um shell.

Responder2

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

Para OS X Serra(10.12.X) você precisa:

1. Crie um arquivo em /Library/LaunchDaemons/limit.maxfiles.pliste cole o seguinte (sinta-se à vontade 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

Responder3

Outra opção pode ser encontrar o culpado:

sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail

No último você pode ver quais arquivos estão abertos:

sudo lsof -n | grep socketfil

E mate o processo se desejar

kill $pid

Dos comentários:

Pelo que vale, você também pode obter uma lista dos IDs de processos com os arquivos mais abertos usando

lsof -n +c 0 | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail

Responder4

Pessoal, no Mavericks 10.9.4

ulimit -n 2048funciona bem. Pode ser necessário iniciar uma nova sessão de login.

informação relacionada