¿Quieres explicar más sobre cuándo sucede esto? ¿En que circunstancias?
slhck
1
@slhck: tengo el mismo problema. Las circunstancias son básicamente "al azar". Soy un desarrollador, por lo que estoy usando mi Mac con bastante frecuencia: ejecutando una o más bases de datos, un servidor web, herramientas de prueba, uno o más navegadores y un reproductor de música a la vez. Google Chrome parece ser un programa que tiene muchos archivos abiertos.
Nathan Long
En realidad, mi "uso intensivo" no era el problema; mi configuración para el número máximo de archivos abiertos para el kernel y por proceso fue mucho menor de lo que deberían ser los valores predeterminados.
Nathan Long
2
Si leyó el comentario de Nathan y se preguntó por qué no incluyó ningún detalle sobre los valores predeterminados, es porque lo explicó todo en su respuesta, a continuación. (¡Buena respuesta! :)
Olie
Estoy en la misma circunstancia de uso que Nathan Long, y descubrí que reiniciar Apache fue el único paso que "resolvió" el problema. Apliqué todos los aumentos del límite a continuación, pero no me ayudaron de inmediato. Estoy ejecutando la línea de comando phpUnit tests> selenium server> firefox> apache> php> mysql, todo en el mismo macbook. Solía funcionar bien hasta que actualicé a rebeldes. El error que obtengo está en la aplicación web que se está probando, es decir, php / apache se está quedando sin archivos, por lo que presumiblemente no está controlado por la configuración del shell.
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 sudopara 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.confgusta limit maxfilesy 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, .zshrco lo que sea) si desea que se ejecute cada vez que abra un shell.
¿Qué límite se aplica a los procesos iniciados haciendo clic en los iconos en el área de inicio? ¿Y cómo cambiar ese límite? Cuando dices "shell", supongo que te refieres a un shell terminal interactivo.
Cheeso
@Cheeso: creo que el límite general del sistema (sysctl) o el límite de launchd, el que sea menor, controla eso.
Nathan Long
1
crear un /etc/launchd.conf con límite de contenido maxfiles 1000000 ¡1000000 funcionó muy bien para mí! (OSX 10.8.2 aquí)
Zugwalt
1
Puse kern.maxfiles=65000 kern.maxfilesperproc=65000en /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?
Pferrel
2
Si alguien tiene problemas con los archivos max que no se pegan, es porque hay un espacio final después de la línea maxfiles, que debe eliminarse.
jjathman
62
¡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.plisty pegue lo siguiente (no dude en cambiar los dos números (que son los límites blando y duro, respectivamente):
funcionó perfectamente, gracias! En mi caso, el error se manifestó en un proceso de Java con el mensajeIO Error: Bad file descriptor (Write failed)
agradl
1
También funciona en El Capitan 10.11.6
Troy Daniels
todavía no puede cambiar el ulimit para shell. El máximo se mantiene 1024, haga lo que haga
DataGreed
En el paso 2, ejecute: sudo chmod 600 /Library/LaunchDaemons/limit.maxfiles.plist sudo chown root /Library/LaunchDaemons/limit.maxfiles.plist
Hai Nguyen
33
Tendrá que aumentar su configuración de ulimit, actualmente es bastante baja en OS X, 256 por defecto. Agregue ulimit -n 4096o similar a su ~ / .profile o equivalente y eso lo resolverá en su entorno local. Corre ulimit -apara 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.
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 launchctltrabajo de @ninjaPixel ( https://superuser.com/a/1171028/760235 ) para obtener una solución permanente.
Si bien esto puede ser una solución alternativa, no parece responder realmente la pregunta. Quizás explicando que no puede deshacerse del mensaje y luego proponiéndolo como una forma de hacerlo menos problemático mejoraría su respuesta.
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:
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:
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.
O bien, la publicación debe marcarse como un duplicado si ya hay una respuesta, de lo contrario, publique la información relevante desde un enlace, ya que el enlace puede no ser válido para siempre.
Respuestas:
De acuerdo con este útil artículo (que recomiendo leer):
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í:Nota: En OS X 10.10 o inferior, puede agregar la configuración en me
/etc/launchd.conf
gustalimit maxfiles
y anulará lo que haya puesto aquí.De nuevo, del artículo:
El comando para eso es:
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.fuente
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):2. Cambie el propietario de su nuevo archivo:
3. Cargue estas nuevas configuraciones:
4. Finalmente, verifique que los límites sean correctos:
fuente
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. Correulimit -a
para verificar tus niveles actualesPara ver la configuración del sistema, ejecute esto:
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.
fuente
ulimit -a
).Otra opción puede ser encontrar al culpable:
Para el último, puede ver qué archivos están abiertos:
Y elimine el proceso si así lo desea
De los comentarios:
fuente
-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.fuente
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 ellaunchctl
trabajo de @ninjaPixel ( https://superuser.com/a/1171028/760235 ) para obtener una solución permanente.fuente
Tu puedes correr
qué proceso abre demasiados archivos.
entonces mátalo.
o
cámbielo a uno más grande.
fuente
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
fuente
Lo encontré mientras hacía un chmod -R, así que lo solucioné dando pasos más pequeños, por ejemplo
fuente
Similar a https://superuser.com/a/1171028/367819
Para verificar los límites actuales en su sistema Mac OS X, ejecute:
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:
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:
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:
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.
fuente