107 votes

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 le souhaite ; au-delà de cette limite, le résultat est le suivant

/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 ?

99voto

rwc9u Points 532

Utilisation de ulimit La commande modifie uniquement les limites de ressources pour le Shell actuel et ses enfants et sudo ulimit crée une racine Shell, ajuste ses limites, puis sort (n'ayant ainsi, pour autant que je puisse le voir, aucun effet réel).
Pour dépasser 12288, vous devez ajuster les paramètres du noyau. kern.maxfiles et kern.maxfilesperproc et aussi (au moins selon cet article de blog qui est un résumé de cette discussion ) une limite de lancement. Vous pouvez utiliser launchctl limit pour régler tous ces éléments en même temps :

sudo launchctl limit maxfiles 1000000 1000000

Pour que cela soit permanent (c'est-à-dire qu'il ne soit pas réinitialisé lors du redémarrage), créez /etc/launchd.conf contenant :

limit maxfiles 1000000 1000000

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

Si cela ne fonctionne pas, il se peut que vous rencontriez des limites de taille dans le noyau. Si votre modèle le supporte en démarrant le noyau dans Mode 64 bits peut aider.

42voto

errant.info Points 521

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

Notes :

  1. Vous devrez redémarrer pour que ces changements prennent effet.
  2. A ma connaissance, vous ne pouvez plus fixer de limites "illimitées" sous OS X.
  3. les maxfiles de launchctl sont limités par les maxfiles de sysctl, 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 la valeur "ouvrir des fichiers" de la part de launchctl par défaut
  6. vous pouvez définir un ulimit personnalisé dans le fichier /etc/profile, ou bien ~/.profile ; bien que cela ne soit pas nécessaire, j'ai fourni un exemple.
  7. Soyez prudent lorsque vous définissez l'une de ces valeurs à un nombre très élevé par rapport à leur valeur par défaut - les caractéristiques existent stabilité/sécurité. J'ai pris ces exemples de chiffres que je crois raisonnables, écrits sur d'autres sites web.

39voto

luis Points 111

Il semble qu'il existe une méthode entièrement 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. Sur Library/LaunchDaemons créer un fichier nommé limit.maxfiles.plist et collez ce qui suit (n'hésitez pas à modifier les deux chiffres (qui sont respectivement les limites douce et dure) :

<?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

21voto

crishoj Points 341

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 à la fois pour la limite douce et la limite dure fait l'affaire :

% sudo launchctl limit maxfiles 4096 8192

9voto

Clustermagnet Points 399

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X