macos memory virtual launchd ulimit

macos - ¿Cómo limitar la memoria de un programa OS X? ulimit-v tampoco-m están funcionando



memory virtual (2)

Después de luchar con esto yo mismo (con un éxito limitado), he determinado que parece haber dos formas de hacerlo ...

Puede configurar un elemento de lanzamiento para su ejecutable. La parte importante de la lista es una sección, como ...

<key>SoftResourceLimits</key> <dict> <key>Stack</key> <integer>10000000000</integer> </dict>

Hay varias claves disponibles ... que se pueden encontrar en la página MAN de Apple .

Otra forma de hacerlo, creo , es establecer un valor en /etc/launchd.conf (sistema) o /etc/launchd-usr.conf (peruser). Por ejemplo, su launchd.conf podría contener ...

umask 002 limit stack 67104768 67104768 limit maxproc 3400 4500 limit maxfiles 256 unlimited setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

La documentación de toda la funcionalidad de launchd es astuta, si me preguntas ... Es como si a Apple no le importara / quisiera que la gente fuera de sus muros realmente entendiera cómo funciona todo. Hay tanto poder para dominar launchd y sus complejidades ... pero hay pocos recursos concretos / oficiales disponibles sobre cómo implementarlos correctamente.

Mis programas se quedan sin memoria como la mitad de las veces que los ejecuto. En Linux, puedo establecer un límite estricto para la memoria disponible utilizando ulimit -v mem-in-kbytes. En realidad, utilizo ulimit -S -v mem-in-kbytes, por lo que tengo un problema de asignación de memoria adecuado en el programa y puedo abortar.

Pero ... ulimit no funciona en OSX 10.6. He intentado con las opciones -s y -m, y no están funcionando.

En 2008 hubo cierta discusión sobre el mismo problema en MacRumors , pero nadie propuso una buena alternativa. Debería ser una forma en que un programa puede aprender que está gastando demasiada memoria o estableciendo un límite a través del sistema operativo.


setrlimit debería hacer el trabajo. Creo que ese es el equivalente BSD de ulimit ...