Eu preciso me livrar do limite "Too many open files in system" no OS X 10.7.1.
Há algum caminho?
Eu preciso me livrar do limite "Too many open files in system" no OS X 10.7.1.
Há algum caminho?
De acordo com este artigo útil (que eu recomendo a leitura):
Por padrão, o número máximo de arquivos que o Mac OS X pode abrir está definido para 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 o número que você escolher)sysctl -w kern.maxfilesperproc=18000
(ou o número que você escolher)Para tornar a mudança permanente, use sudo
para colocar suas configurações em /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 a configuração /etc/launchd.conf
gostar limit maxfiles
e isso substituirá tudo o que você colocar aqui.
Mais uma vez, do artigo:
Depois de fazer isso, o próprio kernel terá um número máximo de arquivos, mas o shell não pode. E como a maioria dos processos que serão executados até isso muitos arquivos vão ser iniciados pelo shell você está 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 (.bashrc
, .zshrc
ou qualquer outra coisa) se você quiser que ele seja executado toda vez que você abrir um shell.
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
Crie um arquivo em /Library/LaunchDaemons/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
Você precisará aumentar suas configurações de ulimit - é muito baixo no OS X atualmente - 256 por padrão. Adicionar ulimit -n 4096
ou similar ao seu ~ / .profile ou equivalente e que irá resolvê-lo em seu ambiente local. Corre ulimit -a
para verificar seus níveis atuais
Para ver as configurações do sistema, execute isto:
launchctl limit maxfiles
É um pouco mais alto no Leão (10240) em uma base por processo do que costumava ser. Mas se você ainda estiver batendo lá, então você pode configurá-lo mais alto usando o mesmo comando com os níveis desejados. Para tornar as mudanças permanentes, o /etc/launchd.conf é onde você precisa adicionar as linhas relevantes.
Outra opção pode ser encontrar o culpado:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
Para o último, você pode ver quais arquivos estão abertos:
sudo lsof -n | grep socketfil
E mate o processo se assim o desejar
kill $pid
Dos comentários:
Por que vale a pena, você também pode obter uma lista dos IDs de processo com os arquivos mais abertos usando
lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
Gente, no Mavericks 10.9.4
ulimit -n 2048
funciona bem. Você pode precisar iniciar uma nova sessão de login.
Eu a encontrei enquanto fazia um chmod -R, então eu fiz isso dando pequenos passos, por exemplo,
# for each directory
find . -type d -exec chmod 755 {} \;
Você pode correr
lsof -n
qual processo abre muitos arquivos.
então mate-o.
ou
sysctl -w kern.maxfiles=20480
mude para um maior.