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?
Respuestas:
De acuerdo con este útil artículo (que recomiendo leer):
De forma predeterminada, la cantidad máxima de archivos que Mac OS X puede abrir se establece en 12,288 y la cantidad máxima de archivos que puede abrir un proceso determinado es 10,240.
Puede verificar esto con:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
Puede aumentar los límites (bajo su propio riesgo) con:
sysctl -w kern.maxfiles=20480
(o cualquier número que elija)sysctl -w kern.maxfilesperproc=18000
(o cualquier número que elija)Para hacer que el cambio sea permanente, úselo sudo
para poner su configuración /etc/sysctl.conf
(que quizás tenga que crear), así:
kern.maxfiles=20480
kern.maxfilesperproc=18000
Nota: En OS X 10.10 o inferior, puede agregar la configuración en me /etc/launchd.conf
gusta limit maxfiles
y anulará lo que haya puesto aquí.
De nuevo, del artículo:
Una vez que haya hecho esto, el núcleo tendrá una cantidad máxima de archivos, pero el shell podría no tenerlo. Y como la mayoría de los procesos que ocuparán tantos archivos serán iniciados por el shell, querrá aumentar eso.
El comando para eso es:
ulimit -S -n 2048 # or whatever number you choose
Ese cambio también es temporal; solo dura la sesión de shell actual. Puede añadirlo a su archivo de configuración de comandos ( .bashrc
, .zshrc
o lo que sea) si desea que se ejecute cada vez que abra un shell.
kern.maxfiles=65000 kern.maxfilesperproc=65000
en /etc/sysctl.conf y reinicié. kern.maxfiles se ignoró y se mantuvo como predeterminado, pero kern.maxfilesperproc se configuró en 65000. No tengo /etc/launchd.conf, ¿qué pasa con eso?
¡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 un archivo en /Library/LaunchDaemons/limit.maxfiles.plist
y pegue lo siguiente (no dude en 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 estas nuevas configuraciones:
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
4. Finalmente, verifique que los límites sean correctos:
launchctl limit maxfiles
IO Error: Bad file descriptor (Write failed)
Tendrá que aumentar su configuración de ulimit, actualmente es bastante baja en OS X, 256 por defecto. Agregue ulimit -n 4096
o similar a su ~ / .profile o equivalente y eso lo resolverá en su entorno local. Corre ulimit -a
para verificar tus niveles actuales
Para ver la configuración del sistema, ejecute esto:
launchctl limit maxfiles
Se establece un poco más alto en Lion (10240) por proceso de lo que solía ser. Pero si todavía lo está presionando allí, puede configurarlo más alto con el mismo comando con los niveles deseados. Para que los cambios sean permanentes /etc/launchd.conf es donde debe agregar las líneas relevantes.
ulimit -a
).
Otra opción puede ser encontrar al culpable:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
Para el último, puede ver qué archivos están abiertos:
sudo lsof -n | grep socketfil
Y elimine el proceso si así lo desea
kill $pid
De los comentarios:
Para lo que vale, también puede obtener una lista de las ID de proceso con los archivos más abiertos usando
lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
-h
(OS X 10.12.3):sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
-h
lsof -n +c 0
para evitar truncar el nombre del proceso.
Gente, en Mavericks 10.9.4
ulimit -n 2048
funciona bien. Es posible que deba iniciar una nueva sesión de inicio de sesión.
Para la última versión de macOS (al momento de escribir: 10.14.1), puede usar sudo launchctl limit maxfiles 64000 524288
(por defecto era 256), pero solo funciona dentro de la sesión actual. Utilice el launchctl
trabajo de @ninjaPixel ( https://superuser.com/a/1171028/760235 ) para obtener una solución permanente.
Tu puedes correr
lsof -n
qué proceso abre demasiados archivos.
entonces mátalo.
o
sysctl -w kern.maxfiles=20480
cámbielo a uno más grande.
Después de todos los cambios anteriores, mi Java no hizo más de 10000 archivos. La solución fue esta bandera jvm -XX: -MaxFDLimit
Lo encontré mientras hacía un chmod -R, así que lo solucioné dando pasos más pequeños, por ejemplo
# for each directory
find . -type d -exec chmod 755 {} \;
Similar a https://superuser.com/a/1171028/367819
Para verificar los límites actuales en su sistema Mac OS X, ejecute:
launchctl limit maxfiles
Las dos últimas columnas son los límites blandos y duros, respectivamente.
Para ajustar los límites de archivos abiertos en todo el sistema en Mac OS X Yosemite, debe 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 de plist debe almacenarse 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 deben estar establecidos de manera predeterminada, pero puede asegurarse de que estén en su lugar ejecutando sudo chmod 644. Si bien los pasos explicados anteriormente harán que los límites de archivos abiertos en todo el sistema se establezcan correctamente al reiniciar, puede aplicarlos manualmente ejecutando launchctl limit.
Además de establecer estos límites en el nivel del sistema, recomendamos establecer también en el nivel de sesión agregando las siguientes líneas a su archivo bashrc, bashprofile o análogo:
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 computadora e ingresar ulimit -n en su terminal. Si su sistema está configurado correctamente, debería ver que maxfiles se ha establecido en 200000.
Puedes seguir este artículo para más detalles.
https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Recuerde reiniciar su Mac para que los valores sean efectivos.