J'avais un nouveau terminal Windows qui échouait avec
[forkpty: Too many open files]
[Could not create a new process and open a pseudo-tty.]
même si j'avais kern.tty.ptmx_max: 511
(le paramètre par défaut pour mon ordinateur qui exécute Catalina avec 64 Go de mémoire). J'ai également kern.maxfilesperproc: 98304
donc je savais que ce n'était pas cette limite non plus.
Je pensais que ça pourrait être ulimit
depuis ulimit -n
était de 256, mais n'a pas tenu compte du fait que lsof -c Terminal | wc
était de 315, bien au-dessus de 256. Il s'avère que c'est était ulimit
mais lsof
liste plus de fichiers que ulimit
limites. Je vais passer l'explication, mais ce que vous devez regarder est
lsof -X -c Terminal | wc
Le site -X
limites lsof
pour montrer juste les descripteurs de fichiers, ce qui ulimit
limites. Il s'agissait de 257 (la limite de 256, plus une ligne d'en-tête dans le fichier lsof
sortie).
Donc, en plus des 2 sysctl
j'ai dû ajuster les paramètres par défaut ulimit
avec launchctl
. Cela s'avère plus difficile que prévu.
La commande à utiliser pour visualiser le ulimit
des limites souples et rigides sur le nombre de fichiers ouverts. launchctl limit maxfiles
ce qui, sur mon ordinateur, donne
maxfiles 256 unlimited
La commande pour changer les limites est launchctl limit maxfiles <softlimit> <hardlimit>
mais vous ne pouvez pas fixer la limite dure à "illimité" car le noyau convertit "illimité" en 10240 . Si vous ne tenez pas compte de la limite stricte, la valeur est identique à celle de la limite souple, ce qui est encore pire. Ce que j'ai fait, c'est utiliser la valeur de sysctl kern.maxfilesperproc
comme limite stricte. J'ai couru
sudo launchctl limit maxfiles 1001 98304
Eh bien, cela a pris soin de ulimit
mais malheureusement, cela a également réinitialisé les paramètres du noyau :
kern.maxfiles: 98304
kern.maxfilesperproc: 1001
ce qui est définitivement pas ce que je voulais. Je voulais que la limite douce modifie l'ulimit par défaut et que la limite dure modifie l'ulimit par défaut. kern.maxfilesperproc
mais au lieu de cela, la limite inférieure a changé kern.maxfilesperproc
et la limite dure a changé kern.maxfiles
. Je l'ai donc relancé, en rétablissant les valeurs précédentes du noyau.
sudo launchctl limit maxfiles 98304 196608
Cela permet de définir le ulimit
beaucoup trop élevé, mais je pense que c'est mieux que de fixer la limite du noyau trop bas.
Ces changements ne persistent pas non plus après un redémarrage. Pour les faire persister, maintenant que /etc/launchd.conf
ne fonctionne plus, envisagez ces solutions pour persistance d'un seul paramètre o restaurer le comportement de launchd.conf .