¿Qué comando/archivo de configuración controla los límites de archivos abiertos en OS X? ¿Hay un comando diferente para OS X 10.5/10.6/10.7? Las opciones que exploro a continuación son ulimit
, sysctl
ylaunchctl
"Demasiados archivos abiertos" aparentemente es un error común en Leopard, quizás en otras versiones de OS X:
Hay muchas formas (¿relacionadas?) de ver los límites de archivos abiertos:
$ 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
Se ha afirmado en algunas de las publicaciones anteriores que estos se pueden modificar con los siguientes comandos:
sudo launchctl limit maxfiles 16384 32768
sudo ulimit -n 32768
sudo sysctl -w kern.maxfilesperproc=16384
sudo sysctl -w kern.maxfiles=32768
Sin embargo, de los comandos anteriores, solo los sysctl
comandos tienen algún efecto aparente (es decir ulimit -n
, launchctl limit
no muestran cambios después de que se hayan ingresado los comandos anteriores, mientras sysctl -a
que muestran los cambios solicitados).
Las ubicaciones correspondientes para cambiar estos parámetros para el sistema operativo son:
/etc/sysctl.conf
/etc/launchd.conf
También descubrí una respuesta que dice que ulimit
solo controla el shell actual.
¿Cómo puedo ajustar hacia arriba los límites máximos de archivos / máximo de archivos abiertos en macOS?
La respuesta simple solía ser que había múltiples límites y el límite más bajo que alcanza en una instancia específica generará su error. Ahora el 10.12 launchctl limit maxfiles
también está en la mezcla. Para obtener detalles sobre la implementación, esta excelente respuesta está recibiendo recompensas y merece más votos que la que puedo darle.
Otros hilos relevantes son:
El ulimit
nivel se establece bajo para evitar que un script de shell deficiente inunde el núcleo con archivos abiertos.
Está ahí para dejar un poco de espacio en el kern.maxfilesperproc
recuento máximo de archivos para que un proceso pueda usar la mayoría, pero no todo, el espacio del controlador de archivos abiertos del kernel.
Para situaciones normales, el kern.maxfiles
es el factor limitante final.
En Sierra: los límites son 256 archivos abiertos y un máximo ilimitado, por lo que descubro que tener de 3 a 4 mil archivos configurados para el límite suave funciona para casi todo nuestro hardware y aún mantiene el sistema receptivo cuando un proceso fuera de control abre demasiados archivos Nos gusta mantener nuestros servidores de desarrollo en el límite de 256 para que detectemos el software problemático y con fugas en desarrollo/prueba y prueba en lugar de descubrirlo en producción.
No soy un fanático de los archivos de 10k; tal vez con el almacenamiento APFS y NVMe veamos el día en que eso no sea impensable, pero intente ceñirse a cientos o miles para sus límites de archivos. Especialmente si su Mac tiene un límite de proceso bajo , tener tantos archivos abiertos por tan pocos procesos puede ser problemático.
Parece que hay un método completamente diferente para cambiar el límite de archivos abiertos para cada versión de OS X.
Para OS X Sierra (10.12.X) necesita:
1. Cree Library/LaunchDaemons
un archivo con el nombre limit.maxfiles.plist
y pegue lo siguiente (siéntase libre de cambiar los dos números (que son los límites suaves y duros, respectivamente):
<?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. Cambia el propietario de tu nuevo archivo:
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
3. Cargue estas nuevas configuraciones:
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
4. Por último, comprueba que los límites son correctos:
launchctl limit maxfiles
Lo siguiente debería resolver los problemas más comunes (y se enumeran en orden de jerarquía):
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
Notas:
En palabras simples:
El ulimit
comando proporciona "control sobre los recursos disponibles para el shell y los procesos que crea" (consulte: help ulimit
y man bash
). Los recursos proporcionados al shell están limitados por los límites de recursos del sistema.
Controla el launchctl
consumo máximo de recursos del sistema por parte del proceso actual (ver: man setrlimit
y man launchctl
). Los valores máximos están limitados por los límites del núcleo.
Los sysctl
límites del kernel de controles (ver: man sysctl
y Límites del kernel de ajuste de BSD ).
Para aumentar los límites, puede usar cada uno de los comandos, según el problema.
Ver también: ¿Cuál es la relación entre `launchctl limit` y `ulimit`?
Para el problema con demasiados archivos abiertos, esto depende de qué límite flexible o estricto se haya alcanzado (ya sea un script de shell local, el script global ejecutado por root
, una aplicación o todos los procesos al mismo tiempo). Vale la pena aumentar todos los límites (límites de shell, launchd y kernel).
Para aumentar los límites de forma persistente, consulte: ¿Cómo controlar de forma persistente el consumo máximo de recursos del sistema en Mac?
usuario200857