La limite des fichiers ouverts ne fonctionne pas comme auparavant dans OSX Yosemite [duplicate]

22

Je viens de mettre à jour Mac OS X vers Yosemite, et maintenant certaines applications ne fonctionnent pas (IBM DB2). Je sais que je dois définir les fichiers ouverts sur 65000, mais la commande ne fonctionne pas.

Andress-MBP:~ root# ulimit -n 12288
Andress-MBP:~ root# ulimit -n 12289
-sh: ulimit: open files: cannot modify limit: Invalid argument

Pourquoi cela se produit-il et comment puis-je corriger le problème?

AngocA
la source

Réponses:

25

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. Dans /Library/LaunchDaemonscréez un fichier nommé limit.maxfiles.plistet collez ce qui suit (n'hésitez pas à modifier les deux nombres, qui sont respectivement les limites logicielles et strictes):

    <?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
    
ninjaPixel
la source
7
Dans l'attente d'une nouvelle réponse pour macOS 10.13! :)
NSTJ
1
Le processus n'a pas fonctionné pour moi jusqu'à ce que je redémarre. Merci! cela a vraiment beaucoup aidé
user2773086
Cet essentiel indique également que la modification de ces fichiers est le moyen de mettre à jour cette limite de fichiers ouverts pour Sierra gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Devin G Rhode
1
Le redémarrage est nécessaire pour que les limites fonctionnent (même si l'étape # 4 affiche les valeurs mises à jour)
trinth
21

Je vois que vous avez posé cette question partout.

Il y a une limite de noyau à laquelle vous devez faire face, kern.maxfiles qui est la limite de noyau et ne peut pas être dépassée lors de la configuration d'ulimit.

Consultez la page du blog Krypted Maximum Files sous Mac OS X pour une description de la manipulation de kern.maxifiles à l'aide de sysctl.

Je n'ai pas encore chargé Yosemite sur mon Mac. Les sysctl -w kern.maxfiles=65000travaux sur Mavericks, qui ont la même limite kern.maxfiles = 12288 par défaut.

J'ai vérifié sur mon VM OS X 10.6.8 et il avait la même limite, ce qui pose la question de savoir comment il fonctionnait auparavant avant votre version OS X.

Il existe un partage de diapositives ( DB2 pour Mac OS X Installation et configuration de DB2 pour Mac OS X ) indiquant les limites recommandées pour l'utilisation de DB2, voir Augmentation des paramètres système à la page 7.

Augmenter les paramètres du système

Ouvrez /etc/sysctl.conf (ou créez-le s'il n'existe pas déjà) et insérez les paramètres suivants. Ces paramètres augmentent certains paramètres de mémoire partagée et les limites utilisateur dont DB2 a besoin pour fonctionner sur Mac.

Ajoutez ce qui suit à /etc/sysctl.conf
kern.sysv.shmmax = 1073741824
kern.sysv.shmmin = 1
kern.sysv.shmmni = 4096
kern.sysv.shmseg = 32
kern.sysv.shmall = 1179648
kern.maxfilesperproc = 65536
kern.maxfiles = 65536

Il semble que vous ayez perdu votre /etc/sysctl.conffichier lors de la mise à niveau.

user187561
la source
En fait, j'ai installé DB2 il y a longtemps et cela a fonctionné. Ensuite, je suis passé à Maverick l'année dernière, sans aucun problème. Et aujourd'hui, j'ai mis à jour vers Yosemite et ce problème apparaît. Je ne peux pas démarrer mon DB2 déjà installé.
AngocA
Une autre chose est que mon sysctl.conf est identique au fichier que vous avez mis dans votre message. J'ai créé la première fois que j'ai installé DB2 (il y a un an), mais je ne l'ai pas touché pour la migration.
AngocA
Le problème était des espaces vides dans ce fichier: ibm.com/developerworks/community/forums/html/…
AngocA
1
Espaces de fuite, qui aurait pensé. Apple est censé avoir certains des meilleurs programmeurs au monde.
user187561
@ user187561 sysctl(8)vient de BSD.
Drew Stephens
12

Dans Mac OS 10.10, il semble que le paramètre ulimit ne puisse pas dépasser le paramètre de limite launchctl.

Vous devez donc d'abord lancer launchctl limit maxfiles dans le terminal pour obtenir le paramètre actuel:

launchctl limit maxfiles
maxfiles    256            unlimited 

Donc, dans mon cas, la limite souple est 256, la limite dure est illimitée. Et puis si je veux fixer la limite douce à 512:

sudo launchctl limit maxfiles 512 unlimited

Une utilisation détaillée de launchctl pour définir les limites peut être trouvée ici: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/launchctl.1.html

imadcat
la source
'launchctl limit maxfiles 512 unlimited' semble définir mes limites (douces, dures) à (512,10240) sur Yosemite 10.10.5 le 2015-09-30
Dave X
2
«launchctl limit maxfiles unlimited unlimited; launchctl limit maxfiles» indique que 10240 est la plus grande limite pouvant être entrée. L'utilisation de plus grands nombres échoue silencieusement, laissant le paramètre comme auparavant.
Dave X