¿Por qué la configuración de kern.maxfiles en /etc/sysctl.conf no se pega?

4

He estado recibiendo varios errores de tipo "demasiados archivos abiertos en el sistema" en Yosemite (10.10.1). Buscar alrededor sugiere configurar kern.maxfiles y kern.maxfilesperprocess en /etc/sysctl.conf .

He intentado esto, y kern.maxfilesperprocess se pega después de reiniciar, pero kern.maxfiles no lo hace.

% cat /etc/sysctl.conf 
# NB DO NOT COPY AND PASTE THIS INTO YOUR CONFIG FILE - IT DOESN'T WORK
kern.maxfiles=20480 
kern.maxfilesperproc=18000

(reiniciar)

% sysctl kern.maxfiles
kern.maxfiles: 12288
% sysctl kern.maxfilesperproc   
kern.maxfilesperproc: 18000

Si lo configuro manualmente en la línea de comandos, funciona, por lo que no parece que esté excediendo ningún límite superior:

% sudo sysctl -w kern.maxfiles=20480 
kern.maxfiles: 12288 -> 20480
% sysctl kern.maxfiles               
kern.maxfiles: 20480

He visto advertencias sobre estos valores que se han anulado en /etc/launchd.conf pero no tengo este archivo:

% cat /etc/launchd.conf
cat: /etc/launchd.conf: No such file or directory

La búsqueda de Spotlight no encuentra ninguna otra mención de kern.maxfiles , así que me quedé sin ideas. ¿Alguna otra sugerencia?

    
pregunta CupawnTae 22.01.2015 - 13:35

3 respuestas

4

A través de una combinación de arranque seguro / detallado, registro de consola y google, encontré un problema similar que me llevó a descubrir un espacio final en la línea maxfiles. Eliminar este espacio resolvió el problema.

  

Por favor, verifique que las líneas en sysctl.conf no tengan un espacio al final. Esto parece estar causando un problema con Yosemite mientras que funcionaba correctamente con versiones anteriores.

Configuraciones corregidas (estas pueden ser copiadas de manera segura):

kern.maxfiles=20480
kern.maxfilesperproc=18000
    
respondido por el CupawnTae 29.01.2015 - 23:51
7

Aunque no responde directamente a su pregunta, encontrará dos soluciones en superusuario :

  1. 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:

    <?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 plist debe almacenarse 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 implementados de manera predeterminada, pero puede asegurarse de que estén implementados ejecutando sudo chmod 644 <filename> . Si bien los pasos explicados anteriormente harán que los límites de los archivos abiertos en todo el sistema se establezcan correctamente al reiniciarlos, puede aplicarlos manualmente ejecutando launchctl limit .

    Además de establecer estos límites en el nivel del sistema, recomendamos establecerlo también en el nivel de la sesión agregando las siguientes líneas a su 'bashrc', 'bashprofile' o archivo análogo:

    ulimit -n 65536
    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 65536.

    Ajusta los archivos max & maxproc limit como usted lo necesita

    Obtenido de: enlace

  2. La modificación del /etc/launchd.conf por muchas consultas de Google y las sugerencias de SO no parecieron 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 archivo /etc/sysctl.conf .

    Esto es lo que tuve que poner para que funcione

    kern.maxfiles=65536
    kern.maxfilesperproc=65536
    

    No estoy seguro de si 'kern.maxfiles' tiene que estar ahí, pero cuando lo tuve allí solo tuve el mismo problema, cuando agregué el 'kern.maxfilesperproc', todo comenzó a funcionar.

Si una o ambas soluciones le funcionan, acredite los carteles originales.

    
respondido por el klanomath 29.01.2015 - 20:38
1

Eliminar un espacio en blanco al final toma solo un paso:

sed -i '~' -e's/[[:space:]]*$//' /etc/sysctl.conf

El comando anterior también guarda una copia de seguridad en /etc/sysctl.conf~ .

    
respondido por el sanmai 18.02.2017 - 01:53

Lea otras preguntas en las etiquetas