22 votes

Quelle commande contrôle les limites du fichier ouvert ?

Quelle commande / fichier de configuration contrôle les limites des fichiers ouverts sous OS X ? Existe-t-il une commande différente pour OS X 10.5 / 10.6 / 10.7 ? Les options que j'explore ci-dessous sont ulimit , sysctl et launchctl

"Trop de fichiers ouverts" est apparemment une erreur courante sur Leopard, peut-être aussi sur d'autres versions d'OS X :

Il existe de nombreuses façons (connexes ?) de visualiser les limites des fichiers ouverts :

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 2048
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 512
virtual memory          (kbytes, -v) unlimited

$ launchctl limit
cpu         unlimited      unlimited      
filesize    unlimited      unlimited      
data        unlimited      unlimited      
stack       8388608        67104768       
core        0              unlimited      
rss         unlimited      unlimited      
memlock     unlimited      unlimited      
maxproc     1024           2048           
maxfiles    2048           4096       

$ sysctl -a | grep files
kern.maxfiles = 32768
kern.maxfilesperproc = 16384
kern.maxfiles: 32768
kern.maxfilesperproc: 16384
kern.num_files: 2049

Il a été affirmé dans certains des messages ci-dessus que ceux-ci peuvent être modifiés avec les commandes suivantes :

sudo launchctl limit maxfiles 16384 32768
sudo ulimit -n 32768
sudo sysctl -w kern.maxfilesperproc=16384
sudo sysctl -w kern.maxfiles=32768

Cependant, parmi les commandes ci-dessus, seule la commande sysctl n'ont apparemment aucun effet (c'est-à-dire que les commandes ulimit -n y launchctl limit ne montrent aucun changement après l'entrée des commandes ci-dessus, tandis que sysctl -a montre les changements demandés).

Les emplacements correspondants pour modifier ces paramètres pour l'OS sont les suivants :

/etc/sysctl.conf
/etc/launchd.conf

J'ai aussi découvert un réponse qui stipule que ulimit ne contrôle que le shell actuel.

Comment puis-je ajuster vers le haut le fichiers max. / fichiers ouverts au maximum limites sur MacOS ?

11voto

Pink Sweetener Points 6079

Il semble qu'il existe une méthode entièrement différente pour modifier la limite des 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

0 votes

Il semble que j'aie des difficultés à définir les fichiers maxfiles comme illimités de cette manière en définissant la deuxième valeur comme "illimitée". Avez-vous une idée ?

9voto

Oskar Points 1242

La réponse simple était auparavant qu'il y avait plusieurs limites et que la limite la plus basse que vous atteigniez dans une instance spécifique générait votre erreur. Maintenant, en 10.12 launchctl limit maxfiles est également en lice. Pour plus de détails sur la mise en œuvre, cette grande réponse reçoit une prime et mérite plus de votes que ceux que je peux lui donner.

Les autres fils de discussion pertinents sont :

Le site ulimit est fixé à un niveau bas pour empêcher un pauvre shell script d'inonder le noyau de fichiers ouverts.

Le site kern.maxfilesperproc est là pour laisser un peu de place dans le nombre maximum de fichiers afin qu'un processus puisse utiliser la plupart mais pas la totalité de l'espace de gestion des fichiers ouverts du noyau.

Pour les situations normales, le kern.maxfiles est le dernier facteur limitant.

Sur Sierra, les limites sont de 256 fichiers ouverts et d'un maximum illimité. J'ai donc constaté que le fait de définir 3 à 4 000 fichiers comme limite souple fonctionne pour la quasi-totalité de notre matériel et permet au système de rester réactif lorsqu'un processus incontrôlé ouvre trop de fichiers. Nous aimons garder nos serveurs de développement à la limite de 256 fichiers ouverts afin de pouvoir détecter les fuites et les logiciels problématiques dans les phases de développement, de test et d'essai plutôt que de les découvrir en production.

Je ne suis pas un fan des fichiers de 10k - peut-être qu'avec APFS et le stockage NVMe, nous verrons le jour où ce ne sera plus impensable, mais essayez de vous en tenir à des centaines ou des milliers pour vos limites de fichiers. Surtout si votre mac a un limite inférieure du processus En effet, le fait d'avoir autant de fichiers ouverts par si peu de processus peut être problématique.

7voto

errant.info Points 278

Les mesures suivantes devraient permettre de résoudre les problèmes les plus courants (elles sont présenté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. 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 /etc/profile, ou ~/.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.

0voto

kenorb Points 11627

En termes simples :

  • Le site ulimit permet de "contrôler les ressources disponibles pour le shell et les processus qu'il crée" (voir : help ulimit y man bash ). Les ressources données au shell sont limitées par les limites de ressources du système.

  • Le site launchctl contrôle la consommation maximale de ressources système par le processus en cours (voir : man setrlimit y man launchctl ). Les valeurs maximales sont limitées par les limites du noyau.

  • Le site sysctl contrôle les limites du noyau (voir : man sysctl y Limites du noyau de BSD Tuning ).

Pour augmenter les limites, vous pouvez utiliser chacune des commandes, en fonction du problème.

Voir aussi : Quelle est la relation entre `launchctl limit` et `ulimit` ?


Pour le problème du trop grand nombre de fichiers ouverts, cela dépend de la limite douce ou dure exacte qui a été atteinte (qu'il s'agisse d'un shell local script, du script global lancé par root une application, ou tous les processus en même temps). Cela vaut la peine d'augmenter toutes les limites (shell, lancé sur le marché et les limites du noyau).

Pour augmenter les limites de manière persistante, voir : Comment contrôler de manière persistante la consommation maximale des ressources système sur Mac ?

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X