OS X Yosemite: troppi file aperti


18

Di recente sono passato da Mavericks a Yosemite ....

Sono abbastanza sicuro che il mio problema risieda con il numero di file che posso aprire , ma non sono sicuro di come risolverlo . Sono anche abbastanza sicuro di aver letto ogni articolo / suggerimento sulla creazione di /etc/sysctl.conffile e /etc/launchd.conffile

Per motivi di chiarezza questo è ciò che entrambi sembrano attualmente nb (non sono nemmeno sicuro che questi siano i comandi giusti per inserirli più - ho provato praticamente tutto e ogni combinazione. Vale a dire: valori più alti, valori più bassi , rimozione di comandi, aggiunta di comandi)

/etc/launchd.conf

limit maxfiles 16384 32768
limit maxproc 1000 2000

/etc/sysctl.conf

# Turn up maxproc
kern.maxproc=2048
# Turn up the maxproc per user
kern.maxprocperuid=512

Ho anche provato ad aumentare i miei valori ulimit - sia a livello globale che locale per la mia sessione corrente ... no bueno

ulimit -a

-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       709
-n: file descriptors                4096

Ok - è qui che è iniziato il mio mal di testa ... Il mio DB (percona-server 5.6.21-69.0 installato tramite homebrew) ha iniziato a soffocare e morire, e nel mysql-error.log è stato riempito con l'errore too many files open.

2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorder_products.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorders.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsdevices.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsracks.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/v_classunity_classlist.frm' (errno: 24 - Too many open files)
2014-10-21 15:20:48 5190 [ERROR] Error in accept: Too many open files

È qui che inizialmente ho iniziato a provare a risolvere quel problema "aggiornando" il mio ulimit, maxfile, maxproc, ecc ...

Alla fine, frustrato, sono passato e sarei tornato su questo problema in seguito. Quindi stavo cercando di farlo sudo gem install nokogiri e ancora e ancora falliva e sputava questo stesso errore (molte ripetizioni sul builder.rb non riuscivano a costruire l'estensione nativa della gemma - seguita da un mucchio di stacktraces ripetute Logs Gist

Errori di installazione di nokogiri errori di installazione di nokogiri

Ho provato / cercato su Google un sacco di approcci diversi per risolvere questo problema (ad esempio: flag aggiuntivi, ecc.). Che cosa è incredibile - e quando ho iniziato a pensare che questo problema fosse legato al numero di file / processi aperti è quando ho controllato topmentre la gemma stava installando ... Sono stato piuttosto sorpreso di vedere cosa ho trovato

top durante gem install nokogiri sudo gem installa nokogiri

Sembra che il mio processo continui a biforcarsi, il che ha poi senso per questa linea ONE nella mia immagine precedente (vedi "immagine degli errori di installazione di nokogiri")

sh: fork: Resource temporarily unavailable

Quindi ho un po 'di idee, ma non sono più sicuro di come eseguire il debug del numero di file?

AGGIORNARE

Bene, sono riuscito a installare nokogiri. Sfortunatamente, non sono esattamente sicuro di cosa abbia risolto il problema, ho provato così tante cose. Ma penso che abbia dovuto fare i conti con la reinstallazione di Ruby. Tuttavia, sto ancora riscontrando lo stesso problema con il mio DB che si lamenta di troppi file aperti quando utilizzo qualsiasi tipo di database che non è banalmente piccolo.


Hm. Probabilmente non dovrebbe generarsi così tanto? Forse vale anche la pena sollevare un bug con gli sviluppatori di quella gemma.
slhck,

Risposte:


16

La modifica di /etc/launchd.confmolte query di Google e suggerimenti SO non sembra funzionare per me in Yosemite (10.10). Ciò che ha funzionato, dopo numerose combinazioni di modifica / riavvio / test, è stato modificare (o creare se non esiste) il /etc/sysctl.conffile.

Questo è ciò che ho dovuto inserire per farlo funzionare

kern.maxfiles=65536
kern.maxfilesperproc=65536

Non sono sicuro che kern.maxfilesdebba esserci, ma quando ce l'ho fatta da solo avevo ancora lo stesso problema, quando ho aggiunto che kern.maxfilesperproctutto ha iniziato a funzionare.


Ho scoperto che è necessario un riavvio per rendere effettive queste variabili (come previsto). Puoi confermare che i valori sono cambiati facendo sysctl -a | grep kern.maxfiles.
Blake Frederick,

8

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 di proprietà (aka plist) /Library/LaunchDaemons/limit.maxfiles.plistche 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>65536</string>
          <string>65536</string>
        </array>
       <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
  </plist>

Ciò imposterà il limite dei file aperti su 65536. Il secondo file di configurazione del plist deve essere archiviato /Library/LaunchDaemons/limit.maxproc.plistcon 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à root:wheele disporre delle autorizzazioni -rw-r--r--. Queste autorizzazioni dovrebbero essere attive per impostazione predefinita, ma è possibile assicurarsi che siano in esecuzione eseguendo sudo chmod 644 <filename>. Sebbene i passaggi sopra descritti consentano di impostare correttamente i limiti dei file aperti a livello di sistema al riavvio, è possibile applicarli manualmente eseguendo launchctl limit.

Oltre a impostare questi limiti a livello di sistema, si consiglia di impostare il a livello di sessione e aggiungendo le seguenti righe al vostro bashrc, bashprofileo file analoghi:

ulimit -n 65536
ulimit -u 2048

Come i file plist, il tuo bashrc o file simili dovrebbero avere le -rw-r--r--autorizzazioni. 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 65536.

Fonte: http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/


1
"Limite massimo di file launchctl illimitato illimitato; maxfile limite di launchctl" riporta che i massimi sono 10240 sul mio Yosemite 10.10.5 il 30/09/2015 e che sperimentare con essi sembra mostrare che se si utilizza un numero esplicito più grande, sarà ignorato.
Dave X,

5

I valori predefiniti su Yosemite sembrano essere 12K e 10K:

$ sysctl -a | grep kern.maxfiles
kern.maxfiles: 12288
kern.maxfilesperproc: 10240

Solo l'impostazione kern.maxfilesin /etc/sysctl.confsembra aver risolto i miei problemi. /etc/sysctl.conffile:

kern.maxfiles=24576

stessi valori esatti per sierra
Devin G Rhode

Comunque launchctl limit maxfilesmi ha dato questo:maxfiles 256 unlimited
Devin G Rhode il
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.