Devo liberarmi del fastidioso limite "Troppi file aperti nel sistema" su OS X 10.7.1.
C'è un modo?
Devo liberarmi del fastidioso limite "Troppi file aperti nel sistema" su OS X 10.7.1.
C'è un modo?
Risposte:
Secondo questo utile articolo (che consiglio di leggere):
Per impostazione predefinita, il numero massimo di file che Mac OS X può aprire è impostato su 12.288 e il numero massimo di file che un determinato processo può aprire è 10.240.
Puoi verificarli con:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
Puoi aumentare i limiti (a tuo rischio e pericolo) con:
sysctl -w kern.maxfiles=20480
(o qualunque numero tu scelga)sysctl -w kern.maxfilesperproc=18000
(o qualunque numero tu scelga)Per rendere permanente la modifica, utilizzare sudo
per inserire le impostazioni /etc/sysctl.conf
(che potrebbe essere necessario creare), in questo modo:
kern.maxfiles=20480
kern.maxfilesperproc=18000
Nota: in OS X 10.10 o versioni precedenti, puoi aggiungere un'impostazione in /etc/launchd.conf
like limit maxfiles
e sovrascriverà qualunque cosa tu abbia inserito qui.
Ancora una volta, dall'articolo:
Una volta fatto questo, il kernel stesso avrà un numero massimo di file ma la shell potrebbe non esserlo. E poiché la maggior parte dei processi che occuperanno così tanti file verranno avviati dalla shell, vorrai aumentarlo.
Il comando per questo è:
ulimit -S -n 2048 # or whatever number you choose
Anche questo cambiamento è temporaneo; dura solo per la sessione di shell corrente. È possibile aggiungere al file di configurazione della shell ( .bashrc
, .zshrc
o qualsiasi altra cosa) se si desidera che venga eseguito ogni volta che si apre una shell.
kern.maxfiles=65000 kern.maxfilesperproc=65000
/etc/sysctl.conf e riavviato. kern.maxfiles è stato ignorato e è rimasto predefinito, ma kern.maxfilesperproc è stato impostato su 65000. Non ho /etc/launchd.conf, quindi che succede?
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) devi:
1.
Crea un file in /Library/LaunchDaemons/limit.maxfiles.plist
e incolla quanto segue (sentiti libero di cambiare i due numeri (che sono i limiti soft e hard, rispettivamente):
<?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. Cambia il proprietario del tuo nuovo file:
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
3. Carica queste nuove impostazioni:
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
4. Infine, controlla che i limiti siano corretti:
launchctl limit maxfiles
IO Error: Bad file descriptor (Write failed)
Dovrai aumentare le tue impostazioni ulimit - è abbastanza basso su OS X in questi giorni - 256 per impostazione predefinita. Aggiungi ulimit -n 4096
o simile al tuo ~ / .profile o equivalente e questo lo risolverà nel tuo ambiente locale. Corri 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) in base al processo rispetto al passato. Ma se lo stai ancora colpendo lì, puoi impostarlo più in alto usando lo stesso comando con i livelli desiderati. Per rendere permanenti le modifiche /etc/launchd.conf è necessario aggiungere le righe pertinenti.
ulimit -a
).
Un'altra opzione potrebbe essere trovare il colpevole:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
Per l'ultimo potresti vedere quali file sono aperti:
sudo lsof -n | grep socketfil
E uccidi il processo se lo desideri
kill $pid
Dai commenti:
Per quello che vale, puoi anche ottenere un elenco degli ID di processo con i file più aperti utilizzando
lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
-h
(OS X 10.12.3):sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
-h
lsof -n +c 0
per impedire il troncamento del nome del processo.
Gente, su Mavericks 10.9.4
ulimit -n 2048
funziona bene. Potrebbe essere necessario avviare una nuova sessione di accesso.
Per gli ultimi macOS (al momento della scrittura: 10.14.1), è possibile utilizzare sudo launchctl limit maxfiles 64000 524288
(per impostazione predefinita era 256), ma funziona solo nella sessione corrente. Utilizzare il launchctl
lavoro da @ninjaPixel ( https://superuser.com/a/1171028/760235 ) per una soluzione permanente.
Puoi correre
lsof -n
quale processo apre troppi file.
quindi uccidilo.
o
sysctl -w kern.maxfiles=20480
cambiarlo in uno più grande.
Dopo tutte le modifiche sopra il mio java non ha fatto più di 10000 file. La soluzione era questa bandiera jvm -XX: -MaxFDLimit
L'ho incontrato mentre facevo un chmod -R, quindi l'ho fatto prendendo piccoli passi, ad es
# for each directory
find . -type d -exec chmod 755 {} \;
Simile a https://superuser.com/a/1171028/367819
Per verificare i limiti attuali sul tuo sistema Mac OS X, esegui:
launchctl limit maxfiles
Le ultime due colonne sono rispettivamente i limiti soft e hard.
Per regolare i limiti dei file aperti su base di sistema in Yosemite di Mac OS X, è necessario creare due file di configurazione. Il primo è un file dell'elenco delle proprietà (aka 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>
Ciò imposterà il limite dei file aperti su 200000. Il secondo file di configurazione del plist dovrebbe essere archiviato 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 le autorizzazioni -rw-r - r--. Queste autorizzazioni dovrebbero essere presenti per impostazione predefinita, ma è possibile assicurarsi che siano presenti eseguendo sudo chmod 644. Sebbene i passaggi sopra descritti consentano di impostare correttamente i limiti dei file aperti a livello di sistema al riavvio, è possibile applicarli manualmente eseguendo il limite di avvio.
Oltre a impostare questi limiti a livello di sistema, ti consigliamo di impostare anche a livello di sessione aggiungendo le seguenti righe al tuo file bashrc, bashprofile o analogo:
ulimit -n 200000
ulimit -u 2048
Come i file plist, il tuo file bashrc o simile dovrebbe avere le autorizzazioni -rw-r - r--. A questo punto, puoi riavviare il computer e inserire ulimit -n nel tuo terminale. Se il tuo sistema è configurato correttamente, dovresti vedere che maxfiles è stato impostato su 200000.
Puoi seguire questo articolo per maggiori dettagli.
https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Ricorda di riavviare il Mac per rendere effettivi i valori.