Nota: Estoy buscando una respuesta para Catalina y para Big Sur. Los comandos de abajo fueron ejecutados en Catalina. La mayoría de las preguntas y respuestas relacionadas son para versiones más antiguas de MacOS que funcionan un poco diferente, pero incluso entonces no he encontrado una respuesta exacta a mi pregunta.
Como explicada aquí Quiero aumentar el ulimit -n
(máximo de archivos abiertos) para el programa Terminal cuando se lanza desde el Finder o cuando se inicia automáticamente al iniciar la sesión como parte de la restauración de Windows abierto. Aunque tengo modo de rendimiento activado, el valor por defecto ulimit -n
es sólo de 256, y la mayoría de los Windows de Terminal ocupan 2 ranuras de archivo: una para el shell y otra para el archivo "Saved Application State", lo que me limita a unos 128 Windows, que a veces no son suficientes.
La única forma que he encontrado para cambiar el ulimit
para la Terminal es a través de
sudo launchctl limit maxfiles <soft-limit> <hard-limit>
Me gustaría establecer el límite suave a algo más grande que 256 pero todavía razonablemente pequeño, como 512 o 1000. Me gustaría dejar el límite duro ilimitado. Por desgracia, he descubierto que no se puede poner el límite duro en "ilimitado" pero no pasa nada, puedo ponerlo en un número adecuadamente alto. He comprobado los límites del kernel (recuerda que tengo el modo de rendimiento activado):
$ sysctl kern.maxfilesperproc kern.maxfiles
kern.maxfilesperproc: 600000
kern.maxfiles: 1200000
Me pareció razonable fijar el límite duro en kern.maxfilesperproc
Así que corrí
sudo launchctl limit maxfiles 999 600000
En ese momento, varios programas se bloquearon inmediatamente. Descubrí que esto no sólo puso el ulimit
También se han configurado los parámetros del kernel, y no de la manera que yo esperaba:
$ sysctl kern.maxfilesperproc kern.maxfiles
kern.maxfilesperproc: 999
kern.maxfiles: 600000
Así que los programas con más de 1000 archivos abiertos se bloquean. Obviamente, esos programas sabían que iban a necesitar tener muchos archivos abiertos y ajustaron sus límites de recursos apropiadamente, lo cual está bien, y necesito mantener eso. Por otro lado, programas como Terminal pueden entrar en bucles que consumen recursos hasta que se agotan, así que quiero mantener los límites blandos para esos programas bajos.
Intenté establecer ulimit
en /etc/bashrc
y /etc/zshrc
pero estos sólo afectan a sus respectivos shells, no a los comandos como Terminal que son lanzados por el Finder/ launchd
.
¿Hay alguna manera de ajustar el límite suave por defecto para el número de archivos abiertos ( ulimit -Sn
, setrlimit()
) para la Terminal (o para todo el sistema) sin cambiar también el parámetro del kernel kern.maxfilesperproc
( sysctl
)?