2012-06-07 08:52:49 +0000 2012-06-07 08:52:49 +0000
202
202

¿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?

Respuestas (10)

234
234
234
2012-06-29 20:23:19 +0000

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.

63
63
63
2017-01-24 14:56:37 +0000

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
34
34
34
2012-06-07 11:09:52 +0000

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.

34
34
34
2017-02-18 00:42:52 +0000

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
10
10
10
2014-09-04 16:19:11 +0000

Amigos, en Mavericks 10.9.4

ulimit -n 2048 funciona bien. Puede que tengas que iniciar una nueva sesión de acceso.

5
5
5
2018-11-23 16:59:24 +0000

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.

1
1
1
2017-05-18 02:52:29 +0000

Puedes ejecutar

lsof -n

que procesa abrir demasiados archivos.

y luego matarlo.

o

sysctl -w kern.maxfiles=20480

cambiarlo a uno más grande.

1
1
1
2019-01-25 13:15:52 +0000

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

0
0
0
2019-05-29 17:55:40 +0000

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.

0
0
0
2016-12-14 18:50:26 +0000

Lo encontré mientras hacía un chmod -R, así que lo hice circular dando pasos más pequeños, por ejemplo

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