2011-06-27 10:56:47 +0000 2011-06-27 10:56:47 +0000
102
102

Aumentare il numero massimo di descrittori di file aperti in Snow Leopard?

Sto cercando di fare qualcosa che richiede un gran numero di descrittori di file

sudo ulimit -n 12288 è il massimo a cui Snow Leopard vuole arrivare; oltre questo risulta

/usr/bin/ulimit: line 4: ulimit: open files: cannot modify limit: Invalid argument.

Voglio aumentare il numero molto di più, diciamo 100000. È possibile?

Risposte (4)

95
95
95
2011-06-27 21:17:50 +0000

Usando il comando ulimit si cambiano solo i limiti delle risorse per la shell corrente e i suoi figli e sudo ulimit crea una shell di root, regola i suoi limiti e poi esce (quindi non ha, per quanto posso vedere, nessun effetto reale).
Per superare 12288, è necessario regolare i parametri kern.maxfiles e kern.maxfilesperproc del kernel, e anche (almeno secondo questo post del blog , che è un riassunto di questa discussione ) un limite di launchd. Puoi usare launchctl limit per regolarli tutti insieme:

sudo launchctl limit maxfiles 1000000 1000000

Per rendere questo permanente (cioè non resettare al riavvio), crea /etc/launchd.conf contenente:

limit maxfiles 1000000 1000000

Allora puoi usare ulimit (ma senza lo sudo) per regolare il tuo limite di processo.

Se questo non funziona, potreste avere dei limiti di dimensione nel kernel. Se il tuo modello lo supporta , avviare il kernel in modalità 64-bit può aiutare.

42
42
42
2012-12-03 12:07:46 +0000

Le seguenti dovrebbero risolvere la maggior parte delle soluzioni (e sono elencate 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

Note:

  1. Sarà necessario riavviare perché queste modifiche abbiano effetto.
  2. AFAIK non è più possibile impostare limiti a ‘illimitati’ sotto OS X
  3. i maxfiles di launchctl sono limitati dai maxfiles di sysctl, e quindi non possono superarli
  4. sysctl sembra ereditare kern.maxfilesperproc da maxfiles di launchctl
  5. ulimit sembra ereditare kern.maxfilesperproc da sysctl. ulimit sembra ereditare il suo valore ‘open files’ da launchctl per impostazione predefinita
  6. è possibile impostare un ulimit personalizzato all'interno di /etc/profile, o ~/.profile; sebbene questo non sia richiesto, ho fornito un esempio
  7. Siate cauti nell'impostare uno qualsiasi di questi valori ad un numero molto alto rispetto al loro default - le caratteristiche esistono stabilità/sicurezza. Ho preso questi numeri di esempio che credo siano ragionevoli, scritti su altri siti web.
20
20
20
2011-12-10 10:11:12 +0000

Sembra che OS X Lion non permetta “illimitato” come valore:

% sudo launchctl limit maxfiles 8192 unlimited
Neither the hard nor soft limit for "maxfiles" can be unlimited. Please use a numeric parameter for both.

Fornire valori numerici sia per il limite morbido che per quello duro fa il lavoro:

% sudo launchctl limit maxfiles 4096 8192
3
3
3
2018-12-21 14:43:27 +0000

Su OS X 10.13.6 questo funziona per me:

$ sysctl kern.maxfiles
kern.maxfiles: 12288
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 10240
$ sudo sysctl -w kern.maxfiles=1048600
kern.maxfiles: 12288 -> 1048600
$ sudo sysctl -w kern.maxfilesperproc=1048576
kern.maxfilesperproc: 10240 -> 1048576
$ ulimit -S -n
256
$ ulimit -S -n 1048576
$ ulimit -S -n
1048576