Pregunta ¿Existe una solución para el error "Demasiados archivos abiertos en el sistema" en OS X 10.7.1?


Necesito deshacerme del molesto límite "Demasiados archivos abiertos en el sistema" en OS X 10.7.1.

¿Hay alguna manera?


150


origen


¿Quieres explicar más sobre cuándo sucede esto? ¿En qué circunstancias? - slhck
@slhck - Tengo el mismo problema. Las circunstancias son básicamente "al azar". Soy un desarrollador, así que estoy usando mi Mac con bastante fuerza: 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; mis configuraciones para la cantidad máxima de archivos abiertos para el kernel y el proceso fueron muy inferiores a los valores predeterminados. - Nathan Long
Si lees el comentario de Nathan y te preguntas por qué no incluyó ningún detalle sobre los incumplimientos, es porque lo deletreó 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 era el único paso que "solucionó" el problema. Apliqué todos los aumentos de límite inferiores pero no me ayudaron de inmediato. Estoy ejecutando pruebas de phpUnit en línea de comandos> servidor de selenio> firefox> apache> php> mysql, todo en el mismo macbook. Solía ​​funcionar bien hasta que me actualicé a Mavericks. El error que recibo se encuentra en la aplicación web que se prueba, es decir, es que php / apache se está quedando sin archivos, por lo que presumiblemente no está controlado por la configuración del shell. - scipilot


Respuestas:


De acuerdo a este útil artículo (que recomiendo leer):

De forma predeterminada, se establece la cantidad máxima de archivos que Mac OS X puede abrir   a 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 el número que elijas)
  • sysctl -w kern.maxfilesperproc=18000 (o el número que elijas)

Para hacer el cambio permanente, use sudo para poner tu configuración en /etc/sysctl.conf (que deberás crear), así:

kern.maxfiles=20480
kern.maxfilesperproc=18000

Nota: en OS X 10.10 o inferior, puede agregar la configuración en /etc/launchd.conf me gusta limit maxfiles y anulará lo que sea que pongas aquí.

Nuevamente, del artículo:

Una vez que haya hecho esto, el kernel en sí tendrá un número máximo de   archivos, pero el shell podría no. Y dado que la mayoría de los procesos tomarán   hasta este muchos archivos van a ser iniciados por el shell que eres   va a querer 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 agregarlo a su archivo de configuración de shell (.bashrc, .zshrc o lo que sea) si desea que se ejecute cada vez que abra un shell.


198



¿Qué límite se aplica a los procesos iniciados al hacer clic en los íconos en el área de lanzamiento? ¿Y cómo cambiar ese límite? Cuando dices "shell", supongo que te refieres a un shell terminal interactivo. - Cheeso
@ Cheeso - Yo pensar que el límite general del sistema (sysctl) o el límite de lanzamiento, el que sea menor, lo controla. - Nathan Long
crear un /etc/launchd.conf con contenido limit maxfiles 1000000 1000000 funcionó muy bien para mí! (OSX 10.8.2 aquí) - Zugwalt
pongo kern.maxfiles=65000 kern.maxfilesperproc=65000 en /etc/sysctl.conf y reiniciado. kern.maxfiles se ignoró y se mantuvo como el predeterminado, pero kern.maxfilesperproc se configuró en 65000. No tengo /etc/launchd.conf entonces, ¿qué pasa con eso? - pferrel
Si alguien tiene problemas con los archivos máx. Que no se pegan, es porque hay un espacio detrás de la línea de máximos archivos, que debe eliminarse. - jjathman


¡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. Crea un archivo en /Library/LaunchDaemons/limit.maxfiles.plist y pegue lo siguiente en (no dude en 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. Finalmente, verifique que los límites sean correctos:

launchctl limit maxfiles

51



funcionó perfectamente, gracias! En mi caso, el error se manifestó en un proceso de Java con el mensaje IO Error: Bad file descriptor (Write failed) - agradl
También funciona en El Capitán 10.11.6 - Troy Daniels
todavía no puede cambiar el ulimit para shell. El máximo permanece 1024 haga lo que haga - DataGreed
En el paso 2 ejecuta: sudo chmod 600 /Library/LaunchDaemons/limit.maxfiles.plist sudo chown root /Library/LaunchDaemons/limit.maxfiles.plist - Hai Nguyen


Necesitará aumentar su configuración de ulimit (actualmente es bastante baja en OS X) 256 por defecto. Añadir ulimit -n 4096 o similar a su ~ / .profile o equivalente y que lo resolverá en su entorno local. correr ulimit -a para verificar tus niveles actuales

Para ver la configuración del sistema, ejecuta 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 estás golpeando allí, entonces puedes configurarlo más alto usando el mismo comando con los niveles deseados. Para hacer que los cambios sean permanentes, /etc/launchd.conf es donde debe agregar las líneas relevantes.


29



256? Son 2560 descriptores de archivos para mí y nunca los he cambiado. El límite es 266 procesos (c.f. ulimit -a) - slhck
Lo mismo para mí, 256 archivos en MacOS X Maverick - Climbatize
256 en OS X Yosemite también - Alexander
256 en El Capitan, también. - TMN
256 en Yosemite. - Jaec


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 mata el proceso si así lo deseas

kill $pid

De los comentarios:

Por lo que vale, también puede obtener una lista de las ID de proceso con la mayoría de los archivos abiertos usando

lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail

17



¡Servicial! Pero ordenar en OS X (10.11) no toma -h. (Tal vez -g?) - Robert Calhoun
Para mí funcionó bien solo sin -h (OS X 10.12.3): sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail - vearutop
Entonces sea sin -h - sanmai
Esta es la única respuesta que me ayudó a rootear mi problema ... gracias :) - SgtPooki
Por lo que vale, también puede obtener una lista de las ID de proceso con la mayoría de los archivos abiertos usando lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail. - Chris Frederick


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.


9





Lo encontré mientras hacía un chmod -R, así que lo conseguí tomando pequeños pasos, p.

# for each directory
find . -type d -exec chmod 755 {} \;

0



Si bien esto puede ser una solución alternativa, no parece responder realmente a la pregunta. Tal vez explicarle que no puede deshacerse del mensaje y luego proponerlo como una forma de que no sea un problema mejoraría su respuesta. - music2myear


Tu puedes correr

lsof -n

qué proceso abre demasiados archivos.

entonces mátalo.

o

sysctl -w kern.maxfiles=20480

cambiarlo a uno más grande.


0



Por favor explique cómo esta respuesta difiere de las ya dadas. - Stephen Rauch