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?
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.
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:
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
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
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
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
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 , là , et sur là .
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?