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

C'è una soluzione per l'errore "Troppi file aperti nel sistema" su OS X 10.7.1?

Devo eliminare il fastidioso limite “Troppi file aperti nel sistema” su OS X 10.7.1. 

C'è un modo?

Risposte (10)

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

Secondo questo utile articolo (che consiglio di leggere):

Per impostazione predefinita, il numero massimo di file che Mac OS X può aprire è impostato a 12.288 e il numero massimo di file che un dato processo può aprire è 10.240.

Potete controllare questi con:

  • sysctl kern.maxfiles
  • sysctl kern.maxfilesperproc

Potete aumentare i limiti (a vostro rischio e pericolo) con:

  • sysctl -w kern.maxfiles=20480 (o qualsiasi numero si scelga)
  • sysctl -w kern.maxfilesperproc=18000 (o qualsiasi numero si scelga)

Per rendere la modifica permanente, usare sudo per mettere le impostazioni in /etc/sysctl.conf (che potrebbe essere necessario creare), come questo:

kern.maxfiles=20480
kern.maxfilesperproc=18000

Nota: Nel sistema operativo X 10. 10 o inferiore, potete aggiungere le impostazioni in /etc/launchd.conf come limit maxfiles e questo sovrascriverà tutto quello che avete messo qui.

Ancora una volta, dall'articolo:

Una volta fatto questo, il kernel stesso avrà un numero massimo di file ma la shell potrebbe non averlo. E siccome la maggior parte dei processi che occuperanno questo numero di file saranno avviati dalla shell, vorrete aumentarlo.

Il comando per questo è:

ulimit -S -n 2048 # or whatever number you choose

Anche questo cambiamento è temporaneo; dura solo per l'attuale sessione della shell. Si può aggiungere al file di configurazione della shell (.bashrc, .zshrc o qualsiasi altra cosa) se si vuole che venga eseguito ogni volta che si apre una shell.

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

Sembra che ci sia un metodo completamente diverso per modificare il limite dei file aperti per ogni versione di OS X!

** Per OS X Sierra** (10.12.X) è necessario:

1. Creare un file a /Library/LaunchDaemons/limit.maxfiles.plist e incollare il seguente (sentitevi liberi di cambiare i due numeri (che sono rispettivamente i limiti soft e hard):

<?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. * Cambiare il proprietario del nuovo file:

sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist

3. Caricare queste nuove impostazioni:

sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist

4. Infine, verificare che i limiti siano corretti:

launchctl limit maxfiles
34
34
34
2012-06-07 11:09:52 +0000

Dovrete aumentare le vostre impostazioni ulimit - è piuttosto basso su OS X in questi giorni - 256 di default. Aggiungi ulimit -n 4096 o simile al tuo ~/.profile o equivalente e questo risolverà il problema nel tuo ambiente locale. Esegui ulimit -a per controllare i tuoi livelli attuali

Per vedere le impostazioni di sistema, esegui questo:

launchctl limit maxfiles

È impostato un po’ più alto in Lion (10240) per ogni processo rispetto al passato. Ma se lo si colpisce ancora lì, allora si può impostare più alto usando lo stesso comando con i livelli desiderati. Per rendere le modifiche permanenti /etc/launchd.conf è necessario aggiungere le relative linee.

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

Un'altra opzione può essere quella di trovare il colpevole:

sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail

Per l'ultima si potrebbe vedere quali sono i file aperti:

sudo lsof -n | grep socketfil
``` ```
kill $pid

E uccidere il processo se lo si desidera

> lsof -n | sed -E 's/^[^]+[]+([^]+).*$//' | uniq -c | sort | tail
> ``` 

* * * * 

Dai commenti: 


> Per quel che vale, si può anche ottenere un elenco degli ID di processo con i file più aperti utilizzando 
> 
> 
> &001
10
10
10
2014-09-04 16:19:11 +0000

Gente, su Mavericks 10.9.4

ulimit -n 2048 funziona bene. Potrebbe essere necessario avviare una nuova sessione di login.

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

Per l'ultimo macOS (al momento della scrittura: 10.14.1), è possibile utilizzare sudo launchctl limit maxfiles 64000 524288 (di default era 256), ma funziona solo all'interno della sessione corrente. Utilizzare il lavoro launchctl da @ninjaPixel https://superuser.com/a/1171028/760235 ) per la soluzione permanente.

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

È possibile eseguire

lsof -n
``` ```
sysctl -w kern.maxfiles=20480

che elaborano aprire troppi file.

poi ucciderlo.

o

&001

cambiarlo in uno più grande.

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

Dopo tutte le modifiche sopra il mio java non ha fatto più di 10000 file. La soluzione è stata questa bandiera jvm -XX:-MaxFDLimit

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

Simile a https://superuser.com/a/1171028/367819 (https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c)

Per controllare i limiti attuali del sistema Mac OS X, eseguire:

launchctl limit maxfiles

Le ultime due colonne sono rispettivamente i limiti soft e hard.

Per regolare i limiti dei file aperti a livello di sistema in Mac OS X Yosemite, è necessario creare due file di configurazione. Il primo è un file di proprietà (alias plist) in /Library/LaunchDaemons/limit.maxfiles.plist che contiene la seguente configurazione 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>

Questo imposterà il limite dei file aperti a 200000. Il secondo file di configurazione del plist deve essere memorizzato in /Library/LaunchDaemons/limit.maxproc.plist con i seguenti contenuti:

<?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>

Entrambi i file plist devono essere di proprietà di root:wheel e avere i permessi -rw-r–r–. Questi permessi devono essere presenti di default, ma è possibile assicurarsi che siano presenti eseguendo sudo chmod 644 . Mentre i passi spiegati sopra faranno sì che i limiti dei file aperti a livello di sistema siano impostati correttamente al riavvio, potete applicarli manualmente eseguendo launchctl limit.

Oltre ad impostare questi limiti a livello di sistema, raccomandiamo di impostare anche a livello di sessione aggiungendo le seguenti righe al vostro bashrc, bashprofile, o file analogo:

ulimit -n 200000
ulimit -u 2048

Come i file plist, il vostro bashrc o file simile dovrebbe avere i permessi -rw-r–r–. A questo punto, potete riavviare il vostro computer e inserire ulimit -n nel vostro terminale. Se il vostro sistema è configurato correttamente, dovreste vedere che i maxfile sono stati impostati a 200000.


Potete seguire questo articolo per maggiori dettagli. [ https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c ]&003


Ricordatevi di riavviare il vostro Mac per avere i valori effettivi.

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

L'ho incontrato mentre facevo un chmod -R, quindi l'ho preso in giro facendo passi più piccoli, ad esempio

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