OS X Yosemite - Muitos arquivos abertos

18

Eu atualizei recentemente de Mavericks para Yosemite ...

Tenho certeza de que meu problema está no número de arquivos que posso abrir - mas não sei como resolvê-lo . Também tenho certeza de que li todos os artigos / dicas sobre como criar o /etc/sysctl.confarquivo e o /etc/launchd.confarquivo

Por uma questão de clareza, é assim que os dois se parecem atualmente (não tenho certeza se esses são os comandos certos para eles) - tentei quase tudo e todas as combinações, como valores mais altos, valores mais baixos , removendo comandos, adicionando comandos)

/etc/launchd.conf

limit maxfiles 16384 32768
limit maxproc 1000 2000

/etc/sysctl.conf

# Turn up maxproc
kern.maxproc=2048
# Turn up the maxproc per user
kern.maxprocperuid=512

Eu também tentei aumentar meus valores ulimit - global e localmente para a minha sessão atual ... sem bueno

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                4096

Ok - foi aqui que minha dor de cabeça começou inicialmente ... Meu banco de dados (percona-server 5.6.21-69.0 instalado via homebrew) começou a engasgar e morrer, e no mysql-error.log foi preenchido com o erro too many files open.

2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorder_products.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorders.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsdevices.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsracks.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/v_classunity_classlist.frm' (errno: 24 - Too many open files)
2014-10-21 15:20:48 5190 [ERROR] Error in accept: Too many open files

Foi aqui que comecei a tentar resolver esse problema "atualizando" meus ulimit, maxfiles, maxproc, etc ...

Eventualmente - frustrado, segui em frente e voltaria a esse assunto mais tarde. Então eu estava tentandosudo gem install nokogiri e mais e mais ele iria falhar e cuspir este mesmo erro (um monte de repetições sobre o builder.rb não para construir a extensão nativa jóia - seguido por um bando de repetidas stacktraces Logs Gist

Erros de instalação nokogiri erros de instalação do nokogiri

Eu tentei / pesquisei no Google várias abordagens diferentes para resolver esse problema (ou seja: sinalizadores adicionais, etc.). O que é incrível - e quando comecei a pensar que esse problema estava vinculado ao número de arquivos / processos abertos, verifiqueitop enquanto a gema estava sendo instalada ... Fiquei bastante surpreso ao ver o que encontrei

topo durante gem install nokogiri sudo gem instalar nokogiri

Parece que meu processo continua bifurcando, o que fazia sentido para esta linha ONE na minha foto anterior (consulte "imagem de erros de instalação do nokogiri")

sh: fork: Resource temporarily unavailable

Então, estou sem ideias, mas não tenho mais certeza de como depurar o número de arquivos?

ATUALIZAR

Bem, eu consegui instalar o nokogiri. Infelizmente, não sei exatamente o que foi corrigido porque tentei muitas coisas. Mas acho que tinha que lidar com a reinstalação do ruby. No entanto, ainda estou recebendo o mesmo problema com meu banco de dados reclamando de muitos arquivos abertos quando uso qualquer tipo de banco de dados que não seja trivialmente pequeno.

veilig
fonte
Hum. Provavelmente não deveria estar gerando tanto? Talvez também valha a pena criar um bug com os desenvolvedores dessa gema.
slhck

Respostas:

16

Modificando o /etc/launchd.conf muitas consultas do Google e sugestões de SO não pareceu funcionar para mim no Yosemite (10.10). O que acabou funcionando, após inúmeras combinações de alterações / reinicializações / testes, foi modificar (ou criar, se não existir) o /etc/sysctl.confarquivo.

Isto é o que eu tive que colocar para fazê-lo funcionar

kern.maxfiles=65536
kern.maxfilesperproc=65536

Não tenho certeza se kern.maxfilesprecisa estar lá, mas quando eu o tinha lá, ainda tinha o mesmo problema, quando adicionei kern.maxfilesperproctudo começou a funcionar.

veilig
fonte
Descobri que é necessário reiniciar para que essas variáveis ​​tenham efeito (conforme o esperado). Você pode confirmar que os valores foram alterados fazendo sysctl -a | grep kern.maxfiles.
Blake Frederick
8

Para ajustar os limites de arquivos abertos em todo o sistema no Mac OS X Yosemite, você deve criar dois arquivos de configuração. O primeiro é um arquivo de lista de propriedades (também conhecido como plist), /Library/LaunchDaemons/limit.maxfiles.plistque contém a seguinte configuração XML:

<?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>65536</string>
          <string>65536</string>
        </array>
       <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
  </plist>

Isso definirá o limite de arquivos abertos para 65536. O segundo arquivo de configuração do plist deve ser armazenado /Library/LaunchDaemons/limit.maxproc.plistcom o seguinte conteúdo:

<?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.maxproc</string>
      <key>ProgramArguments</key>
        <array>
          <string>launchctl</string>
          <string>limit</string>
          <string>maxproc</string>
          <string>2048</string>
          <string>2048</string>
        </array>
      <key>RunAtLoad</key>
        <true />
      <key>ServiceIPC</key>
        <false />
    </dict>
  </plist>

Ambos os arquivos plist devem ser de propriedade root:wheele ter permissões -rw-r--r--. Essas permissões devem estar em vigor por padrão, mas você pode garantir que elas estejam em vigor executando sudo chmod 644 <filename>. Embora as etapas explicadas acima façam com que os limites de arquivos abertos em todo o sistema sejam definidos corretamente na reinicialização, você pode aplicá-los manualmente executando launchctl limit.

Além de definir esses limites no nível do sistema, recomendamos que defina o no nível da sessão, bem anexando as seguintes linhas ao seu bashrc, bashprofileou arquivo semelhante:

ulimit -n 65536
ulimit -u 2048

Como os arquivos plist, seu arquivo bashrc ou similar deve ter -rw-r--r--permissões. Nesse ponto, você pode reiniciar o computador e inserir ulimit -n no seu terminal. Se o seu sistema estiver configurado corretamente, você verá que maxfiles foi definido como 65536.

Originado de: http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/

Jedateach
fonte
11
"launchctl limit maxfiles ilimitado ilimitado; launchctl limit maxfiles" relata que os máximos são 10240 no meu Yosemite 10.10.5 em 30/09/2015, e experimentar com eles parece mostrar que se você usar um número explícito maior, será ignorado.
Dave X
5

Os padrões em Yosemite parecem ser 12K e 10K:

$ sysctl -a | grep kern.maxfiles
kern.maxfiles: 12288
kern.maxfilesperproc: 10240

Apenas ajuste kern.maxfilesna /etc/sysctl.confparece ter resolvido meus problemas. /etc/sysctl.confArquivo:

kern.maxfiles=24576
Michel
fonte
exatamente os mesmos valores para sierra
Devin G Rhode
No entanto, launchctl limit maxfilesme deu o seguinte: #maxfiles 256 unlimited
Devin G Rhode