¿Forma de limitar la cantidad de RAM que puede ocupar un proceso arbitrario?

12

Digamos que tenemos una máquina OS X con 4 GB de RAM. ¿Es posible configurarlo para que ningún proceso individual pueda ocupar más de 3 GB, por lo que no importa qué tan acaparado sea un proceso, siempre queda algo de memoria para que el sistema responda?

Fomite
fuente
66
No. Y esto sería contraproducente. La asignación de RAM de microgestión no es algo en lo que los sistemas operativos estén diseñados. RAM libre es RAM desperdiciada. Demasiado está hecho de la supuesta mala administración de RAM de OS X. Cerrar el Monitor de actividad y seguir con tu vida parece ser el mejor remedio.
8
@cksum Hay una serie masiva de suposiciones en tu comentario, la mayoría de las cuales están equivocadas. No estoy tratando de manejar la gestión de memoria de OS X en el asiento trasero. Lo que realmente estoy haciendo es tratar de descubrir si hay una manera de retener suficiente funcionalidad del sistema mientras se prueba algún código que se convierte fácilmente en un proceso desbocado. Porque la RAM libre no es RAM desperdiciada si es lo que le permite corregir errores.
Fomite
3
Lo sentimos, pero si su pregunta se relaciona con la programación (desarrollo y prueba) de aplicaciones, entonces está fuera de tema para este foro. Consulte las Preguntas frecuentes para obtener más información sobre qué tipo de preguntas pertenecen aquí: apple.stackexchange.com/faq
10
FFS, esta no es una pregunta de programación. Es una pregunta del sistema operativo. Limitar la memoria que puede utilizar un proceso arbitrario (Safari, Matlab, Call of Duty, lo que sea) en el nivel del sistema operativo es una pregunta inequívoca del sistema operativo.
Fomite
77
Al ser un sitio para "entusiastas de Apple y usuarios avanzados", las preguntas que, en esencia, se refieren a la memoria virtual están claramente en los límites y en el tema. Incluso si el desarrollo está relacionado, esto sería válido para problemas de ajuste o rendimiento.
bmike

Respuestas:

9

Aquí se observa una pregunta similar a la siguiente. ¿Cómo puedo limitar la cantidad de RAM que puede usar una aplicación de Mac OS?

Recomiendan usar el comando ulimit , pero no pudieron limitar con éxito la cantidad a lo que deseaban. Creo que el problema con el que se encontraron fue el hecho de que la opción establecida -u o -v no tenía en cuenta el sistema de paginación de memoria, por ejemplo, solo puede asignar X cantidad de espacio para el proceso en RAM real, pero podemos localizar a la memoria virtual todo el día.

Tenga en cuenta que esto puede ser peligroso deshabilitando la memoria virtual, podría hacer que su Mac se bloquee, etc., cuando se ejecuta RAM.

Intente ejecutar ulimit con argumentos -l, -m o -v, sin embargo, como se indica en la página de manual de ulimit, hasta el sistema operativo si prestará atención a estas configuraciones o no como se indica.

ulimit: ulimit [-SHacdefilmnpqrstuvx] [límite]

Modificar límites de recursos de shell.

Proporciona control sobre los recursos disponibles para el shell y los procesos que crea, en sistemas que permiten dicho control.

Realmente no puedo encontrar ninguna fuente definida que confirme si OS X ignora ulimit o no, pero después del error de ulimit al que se hace referencia

Si puede lograr que ulimit funcione para sus necesidades por sí mismo, pruébelo, si no es que una combinación de ulimit y / o deshabilitar la memoria virtual puede permitirle configurar ese límite de 3 GB en procesos seleccionados. Para su información, aquí hay un buen enlace para obtener más información sobre Deshabilitar completamente la memoria virtual en Snow Leopard System 10.6

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
MrDaniel
fuente
Esta parece ser la respuesta correcta probable: lo probaré la próxima vez que ejecute esto. Por ahora, aceptando la respuesta.
Fomite
5

Si está ejecutando el servidor Lion (u OSX más reciente) en su Mac, es posible que pueda ejecutar OSX dentro de una VM (VirtualBox, Parallels o VMWare, et.al.) en esa Mac. Limite la VM a 3 GB de RAM física, y cualquier aplicación o proceso dentro de la VM también será muy limitado. El sistema que aloja la VM debe responder incluso si el sistema operativo en la VM está respaldado-swap-disk-limited o se bloquea.

Si está depurando un proceso potencialmente desbocado, es posible que pueda ingresar a la máquina virtual para ejecutar el depurador o una protuberancia de depuración desde la línea de comandos, y registrar cosas hasta que las cosas se bloqueen.

hotpaw2
fuente