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?
Devo eliminare il fastidioso limite “Troppi file aperti nel sistema” su OS X 10.7.1.
C'è un modo?
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.
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
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.
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
Gente, su Mavericks 10.9.4
ulimit -n 2048
funziona bene. Potrebbe essere necessario avviare una nuova sessione di login.
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.
È possibile eseguire
lsof -n
``` ```
sysctl -w kern.maxfiles=20480
che elaborano aprire troppi file.
poi ucciderlo.
o
&001
cambiarlo in uno più grande.
Dopo tutte le modifiche sopra il mio java non ha fatto più di 10000 file. La soluzione è stata questa bandiera jvm -XX:-MaxFDLimit
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.