2010-07-18 7 views
31

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.¿Cómo limitar la memoria de un programa OS X? ulimit -v tampoco -m funciona

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

En 2008 hubo alguna 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.

+2

Para agregar a esto, parece que no puedo hacer que funcione con 'setrlimit', con cualquiera de RLIMIT_RSS, RLIMIT_DATA, RLIMIT_AS o (llegando aquí) RLIMIT_STACK. –

+0

Tal como está, la recompensa no se otorgará. –

Respuesta

2

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

+0

Miré la página de manual para 'setrlimit', y no pude ver cómo establecer un límite en la memoria virtual, aunque puede establecer un límite en la memoria física. – JWWalker

+0

Ugh, tienes razón ... – Yuji

+0

Sé que bash ulimit se implementa directamente llamando a setrlimit. En la página man de Linux existe la opción RLIMIT_AS, que limita "el tamaño máximo de la memoria virtual del proceso (espacio de direcciones) en bytes", eso es lo que quiero controlar. Realmente no me importa el límite de la memoria física. Quiero saber cuándo todo el programa tiene más de 2 Gb. Bueno, en la página de manual de OS X para setrlimit, hay RLIMIT_AS. El más cercano es RLIMIT_RSS. De hecho, IMHO OS X parece asignar una gran cantidad de memoria virtual, dado lo que veo en el Monitor de actividad. – hectorpal

6

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

Es posible configurar una launchd artículo para su ejecutable .. la parte importante de la plist 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 Apple's MAN page.

Ano Otra forma de hacerlo, Creo que, está estableciendo 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 para toda la funcionalidad de launchd es shotty, si me preguntas .. Es como si Apple podría no importa/quieren que la gente fuera de sus paredes a realidad entender cómo funciona todo. There is so much power dominar launchd y sus complejidades ... pero hay pocos recursos concretos/oficiales disponibles sobre cómo implementarlos correctamente.

+0

+1 Estoy en contra de launchd, y no puedo dejarlo. Si solo funcionara de manera consistente, lo usaría todo el tiempo. – chiggsy

+0

Ambos enlaces rotos. Encontré http://launchd.info útil. – BB9z

Cuestiones relacionadas