Deseja explicar mais sobre quando isso acontece? Em que circunstâncias?
slhck
11
@ Sllck - Eu tenho o mesmo problema. As circunstâncias são basicamente "aleatórias". Sou desenvolvedor, por isso estou usando bastante o meu Mac: executando um ou mais bancos de dados, um servidor web, ferramentas de teste, um ou mais navegadores e um reprodutor de música ao mesmo tempo. O Google Chrome parece ser um programa que possui muitos arquivos abertos.
Nathan Long
Na verdade, meu "uso pesado" não era o problema; minhas configurações para o número máximo de arquivos abertos para o kernal e por processo eram muito menores do que deveriam ser os padrões.
Nathan Long
2
Se você leu o comentário de Nathan e se perguntou por que ele não incluiu nenhum detalhe sobre os padrões, é porque ele explicou tudo em sua resposta abaixo. (Resposta de Nice :)!
Olie
Estou na mesma circunstância de uso de Nathan Long e achei que reiniciar o Apache foi o único passo que "resolveu" o problema. Eu apliquei todos os aumentos de limite abaixo, mas eles não ajudaram imediatamente. Estou executando testes de linha de comando phpUnit> servidor selenium> firefox> apache> php> mysql, todos no mesmo macbook. Costumava funcionar bem até que eu atualizei para Mavericks. O erro que recebo está no webapp que está sendo testado, ou seja, é php / apache ficando sem arquivos, então presumivelmente não é controlado pela configuração do shell.
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 sudoas 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.conflike limit maxfilese 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, .zshrcou qualquer outro) se você quiser que ele seja executado toda vez que você abrir um shell.
que limite se aplica aos processos iniciados clicando nos ícones na área de inicialização? E como mudar esse limite? Quando você diz "shell", suponho que você queira dizer um shell de terminal interativo.
Cheeso
@ Chees - eu acho que o limite geral do sistema (sysctl) ou o limite de inicialização, o que for menor, controla isso.
Nathan Long
11
criar um /etc/launchd.conf com limite de conteúdo maxfiles 1000000 1000000 funcionou muito bem para mim! (OSX 10.8.2 aqui)
Zugwalt 01/02
11
Eu coloquei kern.maxfiles=65000 kern.maxfilesperproc=65000no /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?
Pferrel
2
Se alguém tiver problemas com o máximo de arquivos que não colam, é porque existe um espaço à direita após a linha maxfiles que precisa ser excluído.
jjathman
62
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.pliste cole o seguinte em (sinta-se à vontade para alterar os dois números (que são os limites flexíveis e flexíveis, respectivamente):
Você precisará aumentar suas configurações de ulimit - atualmente está muito baixo no OS X - 256 por padrão. Adicione ulimit -n 4096ou semelhante ao seu ~ / .profile ou equivalente e isso o resolverá em seu ambiente local. Corra ulimit -apara 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.
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 launchctltrabalho de @ninjaPixel ( https://superuser.com/a/1171028/760235 ) para solução permanente.
Embora isso possa ser uma solução alternativa, ele não parece realmente responder à pergunta. Talvez explicar que você não possa se livrar da mensagem e, em seguida, propor isso como uma maneira de torná-lo menos problemático, melhore sua resposta.
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:
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:
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.
A postagem deve ser marcada como duplicada, se já houver uma resposta; caso contrário, poste as informações relevantes em um link, pois o link pode não ser válido para sempre.
Respostas:
De acordo com este artigo útil (que eu recomendo a leitura):
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:Nota: No OS X 10.10 ou inferior, você pode adicionar configurações no
/etc/launchd.conf
likelimit maxfiles
e ele substituirá o que você colocar aqui.Novamente, a partir do artigo:
O comando para isso é:
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.fonte
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):2. Altere o proprietário do seu novo arquivo:
3. Carregue estas novas configurações:
4. Por fim, verifique se os limites estão corretos:
fonte
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. Corraulimit -a
para verificar seus níveis atuaisPara ver as configurações do sistema, execute o seguinte:
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.
fonte
ulimit -a
).Outra opção pode ser encontrar o culpado:
Para o último, você pode ver quais arquivos estão abertos:
E mate o processo, se assim o desejar
Dos comentários:
fonte
-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.fonte
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 olaunchctl
trabalho de @ninjaPixel ( https://superuser.com/a/1171028/760235 ) para solução permanente.fonte
Você pode correr
processo que abre muitos arquivos.
então mate-o.
ou
mude para maior.
fonte
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
fonte
Eu o encontrei enquanto fazia um chmod -R, então resolvi-o dando passos menores, por exemplo
fonte
Semelhante ao https://superuser.com/a/1171028/367819
Para verificar os limites atuais no seu sistema Mac OS X, execute:
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:
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:
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:
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.
fonte