Preciso me livrar do irritante limite "Muitos arquivos abertos no sistema" no OS X 10.7.1.
Há algum caminho?
Preciso me livrar do irritante limite "Muitos arquivos abertos no sistema" no OS X 10.7.1.
Há algum caminho?
Respostas:
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 é definido como 12.288 e o número máximo de arquivos que um determinado processo pode abrir é 10.240.
Você pode verificar estes com:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
Você pode aumentar os limites (por seu próprio 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 sudo
as configurações /etc/sysctl.conf
(que talvez você precise criar), da seguinte forma:
kern.maxfiles=20480
kern.maxfilesperproc=18000
Nota: No OS X 10.10 ou inferior, você pode adicionar configurações no /etc/launchd.conf
like limit maxfiles
e ele substituirá o que você colocar aqui.
Novamente, a partir 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 ocupam esses arquivos serão iniciados pelo shell, você precisará 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 adicionar ao seu arquivo de configuração do shell ( .bashrc
, .zshrc
ou qualquer outro) se você quiser que ele seja executado toda vez que você abrir um shell.
kern.maxfiles=65000 kern.maxfilesperproc=65000
no /etc/sysctl.conf e reiniciei. O kern.maxfiles foi ignorado e permaneceu o padrão, mas o kern.maxfilesperproc foi definido como 65000. Não tenho o /etc/launchd.conf, então o que há com isso?
Parece que existe um método totalmente 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 à vontade para alterar os dois números (que são os limites flexíveis e flexíveis, 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
IO Error: Bad file descriptor (Write failed)
Você precisará aumentar suas configurações de ulimit - atualmente está muito baixo no OS X - 256 por padrão. Adicione ulimit -n 4096
ou semelhante ao seu ~ / .profile ou equivalente e isso o resolverá em seu ambiente local. Corra ulimit -a
para verificar seus níveis atuais
Para ver as configurações do sistema, execute o seguinte:
launchctl limit maxfiles
Ele é definido um pouco mais alto no Lion (10240) por processo do que costumava ser. Mas se você ainda está atingindo o local, pode configurá-lo mais alto usando o mesmo comando com os níveis desejados. Para tornar as alterações permanentes, o /etc/launchd.conf é onde você precisa adicionar as linhas relevantes.
ulimit -a
).
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:
Para o que vale a pena, você também pode obter uma lista dos IDs do processo com os arquivos mais abertos usando
lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
-h
(OS X 10.12.3):sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
-h
lsof -n +c 0
para impedir o truncamento do nome do processo.
Gente, no Mavericks 10.9.4
ulimit -n 2048
funciona bem. Pode ser necessário iniciar uma nova sessão de login.
Para o macOS mais recente (no momento da escrita: 10.14.1), você pode usar sudo launchctl limit maxfiles 64000 524288
(por padrão, era 256), mas funciona apenas na sessão atual. Use o launchctl
trabalho de @ninjaPixel ( https://superuser.com/a/1171028/760235 ) para solução permanente.
Você pode correr
lsof -n
processo que abre muitos arquivos.
então mate-o.
ou
sysctl -w kern.maxfiles=20480
mude para maior.
Depois de todas as alterações acima do meu java, não havia mais do que 10000 arquivos. A solução foi este sinalizador jvm -XX: -MaxFDLimit
Eu o encontrei enquanto fazia um chmod -R, então resolvi-o dando passos menores, por exemplo
# for each directory
find . -type d -exec chmod 755 {} \;
Semelhante ao https://superuser.com/a/1171028/367819
Para verificar os limites atuais no seu sistema Mac OS X, execute:
launchctl limit maxfiles
As duas últimas colunas são os limites flexível e flexível, respectivamente.
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) em /Library/LaunchDaemons/limit.maxfiles.plist que 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>200000</string>
<string>200000</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
Isso definirá o limite de arquivos abertos para 200000. O segundo arquivo de configuração do plist deve ser armazenado em /Library/LaunchDaemons/limit.maxproc.plist com 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>
Os dois arquivos plist devem ser de propriedade de root: wheel e 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 o sudo chmod 644. 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 o limite do launchctl.
Além de definir esses limites no nível do sistema, recomendamos defini-lo no nível da sessão, anexando as seguintes linhas ao seu arquivo bashrc, bashprofile ou análogo:
ulimit -n 200000
ulimit -u 2048
Como os arquivos plist, seu arquivo bashrc ou similar deve ter permissões -rw-r - r--. 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 200000.
Você pode seguir este artigo para obter mais detalhes.
https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Lembre-se de reiniciar o seu Mac para ter os valores efetivos.