OS X Yosemite: demasiados archivos abiertos

18

Recientemente actualicé de Mavericks a Yosemite ... se produjeron dolores de cabeza

Estoy bastante seguro de que mi problema radica en la cantidad de archivos que puedo abrir , pero no estoy seguro de cómo resolverlo . También estoy bastante seguro de que he leído todos los artículos / consejos sobre cómo crear el /etc/sysctl.confarchivo y el /etc/launchd.confarchivo

En aras de la claridad, así es como se ven actualmente ambos nb (ni siquiera estoy seguro de si estos son los comandos correctos para ponerlos más: he intentado casi todo y cada combinación, es decir: valores más altos, valores más bajos , eliminar comandos, agregar comandos)

/etc/launchd.conf

limit maxfiles 16384 32768
limit maxproc 1000 2000

/etc/sysctl.conf

# Turn up maxproc
kern.maxproc=2048
# Turn up the maxproc per user
kern.maxprocperuid=512

También intenté aumentar mis valores de ulimit, tanto global como localmente para mi sesión actual ... no bueno

ulimit -a

-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       709
-n: file descriptors                4096

Ok, aquí es donde inicialmente comenzó mi dolor de cabeza ... Mi DB (percona-server 5.6.21-69.0 instalado a través de homebrew) comenzó a ahogarse y morir, y en mysql-error.log se llenó con el error too many files open.

2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorder_products.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorders.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsdevices.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsracks.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/v_classunity_classlist.frm' (errno: 24 - Too many open files)
2014-10-21 15:20:48 5190 [ERROR] Error in accept: Too many open files

Aquí es donde inicialmente comencé a tratar de resolver ese problema "subiendo" mi ulimit, maxfiles, maxproc, etc.

Finalmente, frustrado, seguí adelante y volvería a ese tema más tarde. Entonces, estaba intentando sudo gem install nokogiri una y otra vez que fallaba y escupía este mismo error (muchas repeticiones sobre el error de builder.rb en la construcción de la extensión nativa de la gema, seguido de un montón de stacktraces repetidos Logs Gist

Errores de instalación de nokogiri errores de instalación de nokogiri

He intentado / buscado en Google un montón de enfoques diferentes para resolver este problema (es decir: banderas adicionales, etc.). Lo que es sorprendente, y cuando comencé a pensar que este problema estaba relacionado con el número de archivos / procesos abiertos, fue cuando verifiqué topmientras se instalaba la gema ... Me sorprendió bastante ver lo que encontré

arriba durante gem install nokogiri sudo gem instalar nokogiri

Parece que mi proceso sigue bifurcando, lo que tiene sentido para esta línea ONE en mi imagen anterior (ver "imagen de errores de instalación de nokogiri")

sh: fork: Resource temporarily unavailable

¿Así que estoy un poco sin ideas, pero ya no estoy seguro de cómo depurar el número de archivos?

ACTUALIZAR

Bueno, logré instalar nokogiri. Desafortunadamente, no estoy exactamente seguro de qué lo solucionó b / c. He intentado tantas cosas. Pero creo que tuvo que lidiar con la reinstalación de ruby. Sin embargo, sigo teniendo el mismo problema con mi base de datos quejándose de que se abren demasiados archivos cuando uso cualquier tipo de base de datos que no es trivialmente pequeña.

velo
fuente
Hm. ¿Probablemente no debería estar generando tanto? Quizás también valga la pena plantear un error con los desarrolladores de esa gema.
slhck

Respuestas:

16

La modificación de /etc/launchd.confmuchas consultas de Google y sugerencias SO no pareció funcionar para mí en Yosemite (10.10). Lo que terminó funcionando, después de numerosas combinaciones de cambio / reinicio / prueba, fue modificar (o crear si no existe) el /etc/sysctl.confarchivo.

Esto es lo que tuve que poner para que funcione

kern.maxfiles=65536
kern.maxfilesperproc=65536

No estoy seguro de si kern.maxfilesnecesita estar allí, pero cuando lo tuve allí solo seguía teniendo el mismo problema, cuando agregué kern.maxfilesperproctodo comenzó a funcionar.

velo
fuente
Descubrí que es necesario reiniciar para que estas variables surtan efecto (como se esperaba). Puede confirmar que los valores han cambiado haciendo sysctl -a | grep kern.maxfiles.
Blake Frederick
8

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) /Library/LaunchDaemons/limit.maxfiles.plistque 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>65536</string>
          <string>65536</string>
        </array>
       <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
  </plist>

Esto establecerá el límite de archivos abiertos en 65536. El segundo archivo de configuración de plist debe almacenarse /Library/LaunchDaemons/limit.maxproc.plistcon los siguientes contenidos:

<?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 root:wheely tener permisos -rw-r--r--. Estos permisos deben estar establecidos de manera predeterminada, pero puede asegurarse de que estén en ejecución ejecutando sudo chmod 644 <filename>. 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 a nivel del sistema, se recomienda ajustar el nivel de sesión, así añadiendo las siguientes líneas a su bashrc, bashprofileo un archivo análoga:

ulimit -n 65536
ulimit -u 2048

Al igual que los archivos plist, su bashrc o un archivo similar debe tener -rw-r--r--permisos. 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 configurado en 65536.

Procedente de: http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/

Jedateach
fuente
1
"launchctl limit maxfiles unlimited unlimited; launchctl limit maxfiles" informa que los máximos son 10240 en mi Yosemite 10.10.5 el 30/09/2015, y experimentar con ellos parece mostrar que si usa un número explícito mayor, será ignorado
Dave X
5

Los valores predeterminados en Yosemite parecen ser 12K y 10K:

$ sysctl -a | grep kern.maxfiles
kern.maxfiles: 12288
kern.maxfilesperproc: 10240

Sólo el establecimiento kern.maxfilesen /etc/sysctl.confparece haber resuelto mis problemas. /etc/sysctl.confarchivo:

kern.maxfiles=24576
Michel
fuente
exactamente los mismos valores para sierra
Devin G Rhode
Sin embargo launchctl limit maxfilesme dio esto:maxfiles 256 unlimited
Devin G Rhode