¿Hay una solución para el error "Demasiados archivos abiertos en el sistema" en OS X 10.7.1?
Necesito deshacerme del molesto límite de “Demasiados archivos abiertos en el sistema” en OS X 10.7.1.
¿Hay alguna manera?
Necesito deshacerme del molesto límite de “Demasiados archivos abiertos en el sistema” en OS X 10.7.1.
¿Hay alguna manera?
Según este útil artículo (que recomiendo leer):
Por defecto, el número máximo de archivos que Mac OS X puede abrir está establecido en 12.288 y el número máximo de archivos que un determinado proceso puede abrir es de 10.240.
Puedes comprobar esto con:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
Puedes aumentar los límites (bajo tu propio riesgo) con:
sysctl -w kern.maxfiles=20480
(o cualquier número que elijas) sysctl -w kern.maxfilesperproc=18000
(o cualquier número que elijas) Para que el cambio sea permanente, usa sudo
para poner tus ajustes en /etc/sysctl.conf
(que puede que tengas que crear), así:
kern.maxfiles=20480
kern.maxfilesperproc=18000
Nota: En OS X 10. 10 o inferior, puedes añadir la configuración en /etc/launchd.conf
como limit maxfiles
y anulará lo que pongas aquí.
De nuevo, del artículo:
Una vez que hayas hecho esto, el kernel en sí tendrá un número máximo de archivos pero el shell puede que no. Y como la mayoría de los procesos que ocuparán tantos archivos van a ser iniciados por el shell vas a querer aumentar eso.
El comando para eso es:
ulimit -S -n 2048 # or whatever number you choose
Ese cambio también es temporal; sólo dura para la sesión actual del shell. Puedes añadirlo al archivo de configuración del shell (.bashrc
, .zshrc
o lo que sea) si quieres que se ejecute cada vez que abras un shell.
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) necesitas:
1. Crear un archivo en /Library/LaunchDaemons/limit.maxfiles.plist
y pegar lo siguiente en (siéntete libre de cambiar los dos números (que son los límites blando y duro, 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. * Cambie el propietario de su nuevo archivo:
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
3. Cargue estos nuevos ajustes:
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
4. Finalmente, compruebe que los límites son correctos:
launchctl limit maxfiles
Necesitarás aumentar los ajustes de los límites - es bastante bajo en OS X estos días - 256 por defecto. Añade ulimit -n 4096
o algo similar a tu ~/.profile o equivalente y eso lo resolverá en tu entorno local. Ejecuta ulimit -a
para comprobar tus niveles actuales
Para ver la configuración del sistema, ejecuta esto:
launchctl limit maxfiles
Está configurado bastante más alto en Lion (10240) en base a cada proceso de lo que solía ser. Pero si todavía lo estás golpeando ahí, entonces puedes ajustarlo más alto usando el mismo comando con los niveles deseados. Para hacer permanentes los cambios, el archivo /etc/launchd.conf es donde necesitas añadir las líneas relevantes.
Otra opción puede ser encontrar al culpable:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
Para el último podrías ver qué archivos están abiertos:
sudo lsof -n | grep socketfil
Y matar el proceso si así lo deseas
kill $pid
De los comentarios:
Por si sirve de algo, también puedes obtener una lista de las identificaciones de los procesos con los archivos más abiertos usando
lsof -n | sed -E 's/^[^]+[]+([^]+).*$//' | uniq -c | sort | tail
Amigos, en Mavericks 10.9.4
ulimit -n 2048
funciona bien. Puede que tengas que iniciar una nueva sesión de acceso.
Para el último macOS (en el momento de escribir este artículo: 10.14.1), puedes usar sudo launchctl limit maxfiles 64000 524288
(por defecto era 256), pero sólo funciona dentro de la sesión actual. Use launchctl
trabajo de @ninjaPixel https://superuser.com/a/1171028/760235 ) para la solución permanente.
Puedes ejecutar
lsof -n
que procesa abrir demasiados archivos.
y luego matarlo.
o
sysctl -w kern.maxfiles=20480
cambiarlo a uno más grande.
Después de todos los cambios sobre mi java no hice más de 10000 archivos. La solución fue esta bandera jvm -XX:-MaxFDLimit
Similar a https://superuser.com/a/1171028/367819
Para comprobar los límites actuales de tu sistema Mac OS X, ejecuta:
launchctl limit maxfiles
Las dos últimas columnas son los límites suaves y duros, respectivamente.
Para ajustar los límites de los archivos abiertos en todo el sistema en Mac OS X Yosemite, debes crear dos archivos de configuración. El primero es un archivo de lista de propiedades (también conocido como plist) en /Library/LaunchDaemons/limit.maxfiles.plist que contiene la siguiente configuración XML:
<?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>200000</string>
<string>200000</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
Esto establecerá el límite de archivos abiertos en 200000. El segundo archivo de configuración plist debe ser almacenado en /Library/LaunchDaemons/limit.maxproc.plist con el siguiente contenido:
<?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.maxproc</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxproc</string>
<string>2048</string>
<string>2048</string>
</array>
<key>RunAtLoad</key>
<true />
<key>ServiceIPC</key>
<false />
</dict>
</plist>
Ambos archivos plist deben ser propiedad de root:wheel y tener permisos -rw-r–r–. Estos permisos deberían estar en su lugar por defecto, pero puedes asegurarte de que están en su lugar ejecutando sudo chmod 644 . Aunque los pasos explicados anteriormente harán que los límites de los archivos abiertos en todo el sistema se establezcan correctamente al reiniciar, puede aplicarlos manualmente ejecutando launchctl limit.
Además de establecer estos límites a nivel de sistema, recomendamos establecer el a nivel de sesión también añadiendo las siguientes líneas a su archivo bashrc, bashprofile o similar:
ulimit -n 200000
ulimit -u 2048
Al igual que los archivos plist, su archivo bashrc o similar debe tener permisos -rw-r–r–. En este punto, puede reiniciar su ordenador e introducir ulimit -n en su terminal. Si su sistema está configurado correctamente, debería ver que maxfiles se ha configurado a 200000.
Puede seguir este artículo para obtener más detalles. https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Recuerde reiniciar su Mac para que los valores sean efectivos.