Quale comando controlla i limiti del file aperto?


19

Quale comando / file di configurazione controlla i limiti del file aperto su OS X? Esiste un comando diverso per OS X 10.5 / 10.6 / 10.7? Le opzioni esploro qui sotto sono ulimit, sysctlelaunchctl

"Troppi file aperti" è apparentemente un errore comune su Leopard, forse altre versioni di OS X:

Esistono molti modi (correlati?) Per visualizzare i limiti dei file aperti:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 2048
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 512
virtual memory          (kbytes, -v) unlimited


$ launchctl limit
cpu         unlimited      unlimited      
filesize    unlimited      unlimited      
data        unlimited      unlimited      
stack       8388608        67104768       
core        0              unlimited      
rss         unlimited      unlimited      
memlock     unlimited      unlimited      
maxproc     1024           2048           
maxfiles    2048           4096       

$ sysctl -a | grep files
kern.maxfiles = 32768
kern.maxfilesperproc = 16384
kern.maxfiles: 32768
kern.maxfilesperproc: 16384
kern.num_files: 2049

In alcuni dei post precedenti è stato affermato che questi possono essere modificati con i seguenti comandi:

sudo launchctl limit maxfiles 16384 32768
sudo ulimit -n 32768
sudo sysctl -w kern.maxfilesperproc=16384
sudo sysctl -w kern.maxfiles=32768

Tuttavia, per i comandi precedenti, solo i sysctlcomandi hanno alcun effetto a quanto pare (vale a dire ulimit -ne launchctl limitnon mostrano alcun cambiamento dopo i comandi di cui sopra sono state inserite, mentre sysctl -anon mostra le modifiche richieste).

Le posizioni corrispondenti per modificare questi parametri per il sistema operativo sono:

/etc/sysctl.conf
/etc/launchd.conf

Ho anche scoperto una risposta che legge che ulimitcontrolla solo la shell corrente.

Come posso regolare verso l'alto i file MAX / max file aperti limiti su MacOS?

Risposte:


9

La semplice risposta era che c'erano più limiti e il limite più basso che raggiungi in un'istanza specifica genererà il tuo errore. Ora il 10.12 launchctl limit maxfilesè anche nel mix. Per i dettagli sull'attuazione, questa grande risposta sta ottenendo generosità e merita più voti di quella che posso dare.

altri thread rilevanti sono:

Il ulimitlivello è basso per impedire a uno script di shell scadente di inondare il kernel con file aperti.

L' kern.maxfilesperprocè lì per lasciare un po 'di spazio nei file Max numero in modo che un processo può utilizzare la maggior parte, ma non tutto lo spazio gestore di file aperto dal kernel.

Per situazioni normali, kern.maxfilesè il fattore limitante finale.

Su Sierra: i limiti sono 256 file aperti e max illimitati, quindi sto scoprendo che avere da 3 a 4 mila file impostati per il limite flessibile funziona per quasi tutto il nostro hardware e mantiene il sistema reattivo quando un processo in fuga ne apre troppi File. Ci piace mantenere i nostri server di sviluppo al limite di 256 in modo da rilevare software che perde e problematico nello sviluppo / gestione temporanea e test piuttosto che scoprirlo in produzione.

Non sono un fan dei file 10k - forse con l'archiviazione APFS e NVMe vedremo il giorno in cui ciò non è impensabile, ma proveremo a rimanere con centinaia o migliaia basse per i limiti dei tuoi file. Soprattutto se il tuo mac ha un limite di processo basso , avere così tanti file aperti da così pochi processi può essere problematico.


9

Sembra che esista un metodo completamente diverso per modificare il limite dei file aperti per ciascuna versione di OS X.

Per OS X Sierra (10.12.X) devi:

1. In Library/LaunchDaemonscreare un file denominatolimit.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

Mi sembra di avere difficoltà a impostare i maxfile su illimitato in questo modo impostando il secondo valore su "illimitato". qualche idea?
user200857,

7

Quanto segue dovrebbe risolvere i problemi più comuni (e sono elencati in ordine di gerarchia):

echo 'kern.maxfiles=20480' | sudo tee -a /etc/sysctl.conf
echo -e 'limit maxfiles 8192 20480\nlimit maxproc 1000 2000' | sudo tee -a /etc/launchd.conf
echo 'ulimit -n 4096' | sudo tee -a /etc/profile

Gli appunti:

  1. Sarà necessario riavviare per rendere effettive queste modifiche.
  2. AFAIK non puoi più impostare limiti su "illimitato" in OS X.
  3. I maxfile launchctl sono delimitati da maxfile sysctl e quindi non possono superarli
  4. sysctl sembra ereditare kern.maxfilesperproc dai maxfile launchctl
  5. ulimit sembra ereditare il suo valore di 'file aperti' da launchctl per impostazione predefinita
  6. è possibile impostare un ulimit personalizzato all'interno di / etc / profile o ~ / .profile; mentre ciò non è necessario, ho fornito un esempio
  7. Prestare attenzione quando si imposta uno di questi valori su un numero molto elevato rispetto al loro valore predefinito: le funzionalità esistono stabilità / sicurezza. Ho preso questi numeri di esempio che ritengo ragionevoli, scritti su altri siti Web.

0

In parole semplici:

  • Il ulimitcomando fornisce "il controllo sulle risorse disponibili per la shell e i processi che crea" (vedere: help ulimite man bash). Le risorse fornite alla shell sono limitate dai limiti delle risorse di sistema.

  • Il launchctlconsumo controlli massima di risorse di sistema per il processo corrente (vedi: man setrlimite man launchctl). I valori massimi sono limitati dai limiti del kernel.

  • I sysctllimiti del kernel di controllo (vedi: man sysctle Limiti del kernel di tuning di BSD ).

Per aumentare i limiti, è possibile utilizzare ciascuno dei comandi, a seconda del problema.

Vedi anche: Qual è la relazione tra `launchctl limit` e` ulimit`?


Per il problema con troppi file aperti, questo dipende da quale limite è stato raggiunto esattamente il limite soft o hard (che si tratti di uno script shell locale, lo script globale eseguito da root, un'app o tutti i processi contemporaneamente). Vale la pena aumentare tutti i limiti (limiti di shell, launchd e kernel).

Per aumentare i limiti in modo persistente, vedi: Come controllare in modo persistente il massimo consumo di risorse di sistema su Mac?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.