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

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

Respuesta1

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

De forma predeterminada, la cantidad máxima de archivos que Mac OS X puede abrir está establecida en 12,288 y la cantidad máxima de archivos que puede abrir un proceso determinado es 10,240.

Puedes comprobarlos con:

  • sysctl kern.maxfiles
  • sysctl kern.maxfilesperproc

Puedes aumentar los límites (bajo tu propia responsabilidad) con:

  • sysctl -w kern.maxfiles=20480(o el número que elijas)
  • sysctl -w kern.maxfilesperproc=18000(o el número que elijas)

Para que el cambio sea permanente, use 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 /etc/launchd.confMe gusta limit maxfilesy anulará todo lo que coloque aquí.

Nuevamente, del artículo:

Una vez que haya hecho esto, el kernel tendrá una cantidad máxima de archivos, pero es posible que el shell no. Y dado que la mayoría de los procesos que ocuparán tantos archivos serán iniciados por el shell, querrás 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 actual de Shell. Puede agregarlo a su archivo de configuración de shell ( .bashrc, .zshrco lo que sea) si desea que se ejecute cada vez que abra un shell.

Respuesta2

¡Parece que existe 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. Cree un archivo /Library/LaunchDaemons/limit.maxfiles.plisty pegue lo siguiente (siéntase libre de cambiar los dos números (que son los límites suaves y estrictos, 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. Por último, comprueba que los límites son correctos:

launchctl limit maxfiles

Respuesta3

Otra opción puede ser encontrar al culpable:

sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail

Para el último puedes ver qué archivos están abiertos:

sudo lsof -n | grep socketfil

Y finalizar el proceso si así lo desea.

kill $pid

De los comentarios:

Por si sirve de algo, también puede obtener una lista de los ID de proceso con los archivos más abiertos usando

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

Respuesta4

Amigos, en Mavericks 10.9.4

ulimit -n 2048funciona bien. Es posible que deba iniciar una nueva sesión de inicio de sesión.

información relacionada