2012-06-07 08:52:49 +0000 2012-06-07 08:52:49 +0000
202
202
Advertisement

Existe alguma correcção para o erro "Demasiados ficheiros abertos no sistema" no OS X 10.7.1?

Advertisement

Preciso de me livrar do irritante limite de “Demasiados ficheiros abertos no sistema” no OS X 10.7.1. 

Existe alguma forma?

Advertisement
Advertisement

Respostas (10)

234
234
234
2012-06-29 20:23:19 +0000

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.

63
63
63
2017-01-24 14:56:37 +0000

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
34
Advertisement
34
34
2012-06-07 11:09:52 +0000
Advertisement

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.

34
34
34
2017-02-18 00:42:52 +0000

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
10
Advertisement
10
10
2014-09-04 16:19:11 +0000
Advertisement

Pessoal, em Mavericks 10.9.4

ulimit -n 2048 funciona bem. Poderá ter de lançar uma nova sessão de login.

5
5
5
2018-11-23 16:59:24 +0000

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.

1
Advertisement
1
1
2017-05-18 02:52:29 +0000
Advertisement

Pode correr

lsof -n

que processam abrir demasiados ficheiros.

depois matá-lo .

ou

sysctl -w kern.maxfiles=20480

mudá-lo para um maior.

1
1
1
2019-01-25 13:15:52 +0000

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*.

0
Advertisement
0
0
2019-05-29 17:55:40 +0000
Advertisement

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.

0
0
0
2016-12-14 18:50:26 +0000

Encontrei-o enquanto fazia um chmod -R, por isso consegui-o dando passos mais pequenos, por exemplo,

# for each directory
find . -type d -exec chmod 755 {} \;
Advertisement

Questões relacionadas

12
5
5
13
8
Advertisement