Existe alguma correcção para o erro "Demasiados ficheiros abertos no sistema" no OS X 10.7.1?
Preciso de me livrar do irritante limite de “Demasiados ficheiros abertos no sistema” no OS X 10.7.1.
Existe alguma forma?
Preciso de me livrar do irritante limite de “Demasiados ficheiros abertos no sistema” no OS X 10.7.1.
Existe alguma forma?
De acordo com este artigo útil (que recomendo a leitura):
Por defeito, o número máximo de ficheiros que o Mac OS X pode abrir está definido para 12.288 e o número máximo de ficheiros que um determinado processo pode abrir é de 10.240.
Pode verificá-los com:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
Pode aumentar os limites (por sua conta e risco) com:
sysctl -w kern.maxfiles=20480
(ou qualquer outro número que escolher) sysctl -w kern.maxfilesperproc=18000
(ou qualquer outro número que escolher) Para tornar a alteração permanente, utilize sudo
para colocar as suas definições em /etc/sysctl.conf
(que poderá ter de criar), como este:
kern.maxfiles=20480
kern.maxfilesperproc=18000
Nota: No OS X 10. 10 ou inferior, pode adicionar as definições em /etc/launchd.conf
como limit maxfiles
e este substituirá o que quer que coloque aqui.
Novamente, a partir do artigo:
Uma vez feito isto, o próprio kernel terá um número máximo de ficheiros mas a shell poderá não ter. E uma vez que a maioria dos processos que irão ocupar este grande número de ficheiros serão iniciados pela shell, vai querer aumentar isso.
O comando para isso é:
ulimit -S -n 2048 # or whatever number you choose
Essa alteração também é temporária; dura apenas para a actual sessão da shell. Pode adicioná-lo ao seu ficheiro de configuração da shell (.bashrc
, .zshrc
ou o que quer que seja) se quiser que seja executado sempre que abrir uma shell.
Parece que existe um método completamente diferente para alterar o limite de ficheiros abertos para cada versão de OS X!
** Para OS X Sierra** (10.12.X) é necessário:
1. Criar um ficheiro em /Library/LaunchDaemons/limit.maxfiles.plist
e colar o seguinte em (sinta-se à vontade para alterar os dois números (que são os limites suave e duro, 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 ficheiro:
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. Finalmente, verifique se os limites estão correctos:
launchctl limit maxfiles
Você precisará aumentar suas configurações de ulimit - é bastante baixo no OS X hoje em dia - 256 por padrão. Adicione ulimit -n 4096
ou similar ao seu ~/.profile ou equivalente e isso irá resolvê-lo no seu ambiente local. Execute ulimit -a
para verificar os seus níveis actuais
Para ver as definições do sistema, execute isto:
launchctl limit maxfiles
É definido um pouco mais alto em Leão (10240) 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 alterações permanentes /etc/launchd.conf é onde você precisa adicionar as linhas relevantes.
Outra opção poderá ser encontrar o culpado:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
Para o último, poderá ver que ficheiros estão abertos:
sudo lsof -n | grep socketfil
e matar o processo se assim o desejar
kill $pid
A partir dos comentários:
Para que conste, pode também obter uma lista dos IDs de processo com os ficheiros mais abertos usando
lsof -n | sed -E 's/^[^]+[]+([^]+).*$//' | uniq -c | sort | tail
Pessoal, em Mavericks 10.9.4
ulimit -n 2048
funciona bem. Poderá ter de lançar uma nova sessão de login.
Para o último macOS (na altura da redacção: 10.14.1), pode utilizar o sudo launchctl limit maxfiles 64000 524288
(por defeito era 256), mas só funciona dentro da sessão actual. Use launchctl
job de @ninjaPixel https://superuser.com/a/1171028/760235 ) para solução permanente.
Pode correr
lsof -n
que processam abrir demasiados ficheiros.
depois matá-lo .
ou
sysctl -w kern.maxfiles=20480
mudá-lo para um maior.
Depois de todas as alterações acima do meu java, não foram feitos mais de 10000 ficheiros. A solução foi esta bandeira jvm -XX:-MaxFDLimit*.
Similar a https://superuser.com/a/1171028/367819
Para verificar os limites actuais do seu sistema Mac OS X, corra:
launchctl limit maxfiles
As duas últimas colunas são os limites soft e hard, respectivamente.
Para ajustar os limites dos ficheiros abertos em todo o sistema no Mac OS X Yosemite, deve criar dois ficheiros de configuração. O primeiro é uma lista de propriedades (também conhecida 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>
Isto irá definir o limite de ficheiros abertos para 200000. O segundo ficheiro de configuração plist deve ser guardado 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>
Ambos os ficheiros plist devem ser propriedade do root:wheel e ter permissões -rw-r–r–. Estas permissões devem estar em vigor por defeito, mas pode garantir que estão em vigor executando sudo chmod 644 . Embora os passos explicados acima façam com que os limites de ficheiros abertos em todo o sistema sejam correctamente definidos no reinício, pode aplicá-los manualmente correndo o limite de arranque.
Além de definir estes limites ao nível do sistema, recomendamos que também os defina ao nível da sessão, anexando as seguintes linhas ao seu ficheiro bashrc, bashprofile, ou análogo:
ulimit -n 200000
ulimit -u 2048
Como os ficheiros plist, o seu ficheiro bashrc ou semelhante deve ter permissões -rw-r–r–r–. Neste ponto, pode reiniciar o seu computador e introduzir ulimit -n no seu terminal. Se o seu sistema estiver configurado correctamente, deverá ver que o maxfiles foi configurado para 200000.
Pode seguir este artigo para mais detalhes. https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Lembre-se de reiniciar o seu Mac para ter os valores efectivos.