web-dev-qa-db-fra.com

Augmenter le nombre maximal 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 haut que Snow Leopard veut aller; au-delà, cela se traduit par

/ usr/bin/ulimit: ligne 4: ulimit: fichiers ouverts: impossible de modifier la limite: argument invalide.

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

100
Chris Poole

L’utilisation de la commande ulimit ne modifie que les limites de ressources du shell actuel et de ses enfants. Sudo ulimit crée un shell racine, ajuste ses limites, puis se ferme (ce qui n’a, à ma connaissance, aucun effet réel).
Pour dépasser 12288, vous devez ajuster les paramètres kern.maxfiles et kern.maxfilesperproc du noyau, ainsi que (au moins selon cette entrée de blog , qui est un résumé de cette discussion ) et une limite de lancement. . Vous pouvez utiliser launchctl limit pour ajuster tous ces éléments à la fois:

Sudo launchctl limit maxfiles 1000000 1000000

Pour rendre ceci permanent (c.-à-d. Pas réinitialisé lorsque vous redémarrez), créez /etc/launchd.conf contenant:

limit maxfiles 1000000 1000000

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

Si cela ne le fait pas, vous risquez de rencontrer des limites de taille dans le noyau. Si votre modèle le prend en charge , le démarrage du noyau en mode 64 bits peut vous aider.

93
Gordon Davisson

Les éléments suivants devraient résoudre la plupart des solutions (et sont répertoriés 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

Remarques:

  1. Vous devrez redémarrer pour que ces modifications prennent effet.
  2. Autant que je sache, vous ne pouvez plus définir de limites «illimitées» sous OS X
  3. launchctl maxfiles sont liés par sysctl maxfiles et ne peuvent donc pas les dépasser
  4. sysctl semble hériter de kern.maxfilesperproc de launchctl maxfiles
  5. ulimit semble hériter de sa valeur 'open files' de launchctl par défaut
  6. vous pouvez définir un ulimit personnalisé dans/etc/profile ou ~/.profile; bien que cela ne soit pas obligatoire, j'ai fourni un exemple
  7. Soyez prudent lorsque vous définissez l'une de ces valeurs sur un nombre très élevé par rapport à leur valeur par défaut - les fonctions existent: stabilité/sécurité. J'ai pris ces exemples de numéros que je pense être raisonnables, écrits sur d'autres sites.
40
errant.info

Il semble qu'il existe une méthode totalement différente pour modifier la limite de fichiers ouverts pour chaque version d'OS X!

Pour OS X Sierra (10.12.X), vous devez:

1. Dans Library/LaunchDaemons, créez un fichier nommé limit.maxfiles.plist et collez le texte suivant dans (n'hésitez pas à modifier les deux nombres (qui correspondent respectivement aux limites logicielles et matérielles):

<?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. Changez le propriétaire de votre nouveau fichier:

Sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist

3. Chargez ces nouveaux paramètres:

Sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist

4. Enfin, vérifiez que les limites sont correctes:

launchctl limit maxfiles
33
ninjaPixel

Il semble que OS X Lion n'autorise pas la valeur "illimité":

% 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
20
crishoj

Sur Mavericks, c'est simple. En tant qu'utilisateur régulier:

ulimit -n 8192

Vous pouvez vérifier les paramètres mis à jour via

ulimit -a

Sur ma machine:

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                8192
8
Clustermagnet

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
2
Petr Javorik

Certaines limites ne peuvent pas être modifiées par ulimit, car elles ne s'appliquent qu'au shell actuel. Par conséquent, la commande launchctl doit être utilisée pour modifier les limites de manière globale, par exemple.

Sudo launchctl limit maxfiles 100000 unlimited

Notez que l'application de ces limites dans /etc/launchd.conf (comme suggéré dans d'autres réponses) n'est plus prise en charge dans les dernières versions de macOS. Bien que vous puissiez toujours utiliser launchd.plist (voir: man launchd.plist) tel que les fichiers de configuration plist par utilisateur ou à l’échelle du système suggérés here , , et sur .


Pour rendre ces limites persistantes, vous pouvez utiliser le fichier /etc/sysctl.conf et ajouter par exemple:

kern.maxprocperuid=1000
kern.maxproc=2000
kern.maxfilesperproc=20000
kern.maxfiles=50000

Pour que les modifications prennent effet, il faut redémarrer.

Pour voir les limites actuelles, exécutez: launchctl limit ou sysctl -a | grep ^kern.max.

Voir aussi: Comment conserver les paramètres ulimit dans macOS?

1
kenorb