¿Qué comando controla los límites de archivo abierto?

20

¿Qué comando / archivo de configuración controla los límites de archivo abierto en OS X? ¿Hay un comando diferente para OS X 10.5 / 10.6 / 10.7? Las opciones que exploro a continuación son ulimit , sysctl y launchctl

"Demasiados archivos abiertos" es aparentemente un error común en Leopard, quizás otras versiones de OS X:

Hay muchas (¿relacionadas?) formas de ver los límites de archivos abiertos:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 2048
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 512
virtual memory          (kbytes, -v) unlimited


$ launchctl limit
cpu         unlimited      unlimited      
filesize    unlimited      unlimited      
data        unlimited      unlimited      
stack       8388608        67104768       
core        0              unlimited      
rss         unlimited      unlimited      
memlock     unlimited      unlimited      
maxproc     1024           2048           
maxfiles    2048           4096       

$ sysctl -a | grep files
kern.maxfiles = 32768
kern.maxfilesperproc = 16384
kern.maxfiles: 32768
kern.maxfilesperproc: 16384
kern.num_files: 2049

En algunas de las publicaciones anteriores se ha afirmado que se pueden modificar con los siguientes comandos:

sudo launchctl limit maxfiles 16384 32768
sudo ulimit -n 32768
sudo sysctl -w kern.maxfilesperproc=16384
sudo sysctl -w kern.maxfiles=32768

Sin embargo, de los comandos anteriores, solo los comandos sysctl tienen algún efecto aparente (es decir, ulimit -n y launchctl limit no muestran ningún cambio después de que se hayan ingresado los comandos anteriores, mientras que sysctl -a muestra los cambios solicitados ).

Las ubicaciones correspondientes para cambiar estos parámetros para el sistema operativo son:

/etc/sysctl.conf
/etc/launchd.conf

También descubrí uno answer que lee que ulimit solo controla el shell actual.

¿Cómo puedo ajustar hacia arriba los límites de max files / max open files en macOS?

    
pregunta keflavich 14.12.2011 - 18:58

4 respuestas

9

La respuesta simple solía ser que existían múltiples límites y que el límite más bajo que alcanza en una instancia específica generará su error. Ahora en 10.12 launchctl limit maxfiles también está en la mezcla. Para obtener más información sobre la implementación, esta gran respuesta es obtener recompensa y merece más votos que la que puedo dar.

otros hilos relevantes son:

El nivel ulimit se establece bajo para evitar que una secuencia de comandos de shell deficiente inunde el núcleo con archivos abiertos.

El kern.maxfilesperproc está ahí para dejar un poco de espacio en el número máximo de archivos, de modo que un proceso pueda usar la mayoría, pero no todo, el espacio del controlador de archivos abiertos desde el kernel.

Para situaciones normales, el kern.maxfiles es el factor limitante final.

En Sierra: los límites son 256 archivos abiertos y un máximo ilimitado, por lo que me parece que tener de 3 a 4 mil archivos configurados para el límite suave funciona para casi todo nuestro hardware y aún mantiene el sistema en funcionamiento cuando se produce un proceso fuera de control. abre demasiados archivos. Nos gusta mantener nuestros servidores de desarrollo en el límite 256 para que podamos detectar software con problemas y con problemas en el desarrollo / preparación y prueba, en lugar de descubrirlo en producción.

No soy un fanático de los archivos de 10k, tal vez con APFS y almacenamiento de NVMe veremos el día en que no sea impensable, pero trate de mantener cientos o miles de bajas para sus límites de archivos.

    
respondido por el bmike 14.04.2012 - 22:19
8

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) debe:

1. En Library/LaunchDaemons cree un archivo llamado limit.maxfiles.plist y pegue lo siguiente en (no dude en cambiar los dos números (que son los límites flexibles 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 estos nuevos ajustes:

sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist

4. Por último, compruebe que los límites son correctos:

launchctl limit maxfiles
    
respondido por el ninjaPixel 24.01.2017 - 16:00
6

Lo siguiente debería resolver los problemas más comunes (y se enumeran por orden de jerarquía):

echo 'kern.maxfiles=20480' | sudo tee -a /etc/sysctl.conf
echo -e 'limit maxfiles 8192 20480\nlimit maxproc 1000 2000' | sudo tee -a /etc/launchd.conf
echo 'ulimit -n 4096' | sudo tee -a /etc/profile

Notas:

  1. Deberá reiniciar para que estos cambios surtan efecto.
  2. AFAIK ya no puede establecer límites en 'ilimitado' en OS X
  3. launchctl maxfiles están limitados por sysctl maxfiles, y por lo tanto no puede excederlos
  4. sysctl parece heredar kern.maxfilesperproc de launchctl archivos max
  5. ulimit parece heredar su valor de 'archivos abiertos' de launchctl por defecto
  6. puede establecer un ulimit personalizado dentro de / etc / profile, o ~ / .profile; Si bien esto no es obligatorio, he proporcionado un ejemplo.
  7. Tenga cuidado al establecer cualquiera de estos valores en un número muy alto en comparación con su valor predeterminado: las características existen estabilidad / seguridad. Tomé estos números de ejemplo que creo que son razonables, escritos en otros sitios web.
respondido por el errant.info 03.12.2012 - 13:08
0

En palabras simples:

  • El comando ulimit proporciona "control sobre los recursos disponibles para el shell y los procesos que crea" (ver: help ulimit y man bash ). Los recursos dados al shell están limitados por los límites de recursos del sistema.

  • El launchctl controla el consumo máximo de recursos del sistema por el proceso actual (consulte: man setrlimit y man launchctl ). Los valores máximos están limitados por los límites del kernel.

  • El sysctl controla los límites del kernel (ver: man sysctl y Ajuste de BSD Límites del núcleo ).

Para aumentar los límites, puedes usar cada uno de los comandos, dependiendo del problema.

Vea también: ¿Cuál es la relación entre 'launchctl limit' y 'ulimit'?

Para el problema con demasiados archivos abiertos, esto depende del límite exacto o difícil que se haya alcanzado (ya sea un script de shell local, el script global ejecutado por root , una aplicación o todos los procesos al mismo tiempo). hora). Vale la pena aumentar todos los límites (shell, launchd y límites del kernel).

Para aumentar los límites de forma persistente, consulte: ¿Cómo controlar de forma persistente el consumo máximo de recursos del sistema en Mac?

    
respondido por el kenorb 11.01.2018 - 20:32

Lea otras preguntas en las etiquetas