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

Augmenter le nombre maximum de descripteurs de fichiers ouverts dans Snow Leopard ?

J'essaie de faire quelque chose qui nécessite un grand nombre de descripteurs de fichiers

sudo ulimit -n 12288 est aussi élevé que Snow Leopard veut le faire ; au-delà, cela donne

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

Je veux augmenter le nombre beaucoup plus haut, disons 100000. Est-ce possible ?

Réponses (4)

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

L'utilisation de la commande ulimit ne change que les limites de ressources pour le shell courant et ses enfants et sudo ulimit crée un shell racine, ajuste ses limites, puis sort (n'ayant donc, à ma connaissance, aucun effet réel).
Pour dépasser 12288, vous devez ajuster les paramètres kern.maxfiles et kern.maxfilesperproc du noyau, et aussi (au moins selon cette entrée de blog , qui est un résumé de cette discussion ) une limite de lancement. Vous pouvez utiliser launchctl limit pour ajuster tous ces paramètres à la fois :

sudo launchctl limit maxfiles 1000000 1000000

Pour rendre cela permanent (c'est-à-dire ne pas réinitialiser au redémarrage), créez /etc/launchd.conf contenant :

limit maxfiles 1000000 1000000

Alors vous pouvez utiliser ulimit (mais sans le sudo) pour ajuster votre limite de processus.

Si ce n'est pas le cas, vous risquez de rencontrer des limites de taille dans le noyau. Si votre modèle le prend en charge , démarrer le noyau en mode 64 bits peut aider.

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

Les solutions suivantes devraient résoudre la plupart des problèmes (et sont énumérées dans l'ordre de leur hiérarchie) :

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

Notes :

  1. Vous devrez redémarrer pour que ces changements prennent effet.
  2. AFAIK vous ne pouvez plus fixer de limites à “illimité” sous OS X
  3. launchctl maxfiles est limité par sysctl maxfiles, et ne peut donc pas les dépasser
  4. sysctl semble hériter de kern.maxfilesperproc de launchctl maxfiles
  5. ulimit semble hériter de la valeur ‘open files’ de launchctl par défaut
  6. Vous pouvez définir une limite ulimit personnalisée dans /etc/profile, ou ~/.profile ; bien que cela ne soit pas obligatoire, j'ai fourni un exemple
  7. Soyez prudents lorsque vous fixez une de ces valeurs à un nombre très élevé par rapport à leur valeur par défaut - les fonctionnalités existent stabilité/sécurité. J'ai pris ces exemples de chiffres que je juge raisonnables, écrits sur d'autres sites web.
20
20
20
2011-12-10 10:11:12 +0000

Il semble que OS X Lion n'autorise pas la valeur “illimitée” :

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

Fournir des valeurs numériques pour la limite souple et la limite stricte fait le travail :

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

Sur OS X 10.13.6, cela fonctionne pour moi :

$ 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