¿Se puede evitar que macOS pause una aplicación cuando el sistema se queda sin memoria de la aplicación?

A veces ejecuto proyectos informáticos distribuidos en BOINC Manager mientras mi iMac está inactiva. A menudo, aparece un cuadro de diálogo Forzar salida que muestra el mensaje "Su sistema se ha quedado sin memoria de la aplicación". Cuando esto sucede, todas las aplicaciones abiertas, excepto el Finder, se pausan y deben reiniciarse manualmente, una por una, desde el cuadro de diálogo.

Podría reducir la cantidad de RAM que BOINC Manager puede usar, pero preferiría asignar la mayor cantidad de RAM posible a los proyectos BOINC . ¿Cómo puedo evitar que macOS suspenda BOINC (o cualquier otra aplicación o aplicaciones) cuando el sistema se queda sin RAM?

Actualización : este problema parece haber sido solucionado por una actualización reciente de BOINC.

Con la memoria virtual, ¿no es el programa el culpable de la mala gestión de la memoria y no el sistema operativo? Cuando ve esa alerta, ¿qué muestra el Monitor de actividad para la presión de la memoria? (verde/amarillo/rojo, o mejor, una captura de ventana de los detalles de la memoria sería útil para darle más consejos).

Respuestas (1)

Lo más probable es que no desee evitar que macOS suspenda aplicaciones cuando el sistema se queda sin RAM cuando sabe que la única alternativa es eliminar el programa. Es decir, detener la ejecución del programa ahora y aquí sin guardar sus datos ni nada por el estilo.

Sin embargo, no es necesario que reinicie los programas que están en pausa como en "cierre el programa y vuelva a iniciarlo". En su lugar, puede reactivar el programa cuando tenga suficiente memoria libre en el sistema. Puedes hacer esto desde la terminal ejecutando:

kill -CONT <pid>

donde debe reemplazarse con el ID de proceso del proceso que desea reanudar.

Puede encontrar la ID del proceso usando el Monitor de actividad o el comando "ps" en la Terminal (en este caso, busque procesos con estado T ya que estos son los que están en pausa/detenidos).

Una forma sencilla de reanudar la pausa y encontrar el ID de una sola vez es:

kill -CONT `pgrep myprogram`

donde myprogram es el nombre del programa que desea reanudar.

La segunda parte de su pregunta donde describe el escenario ideal es muy difícil de lograr con un programa estándar. En general, los programas pueden solicitar memoria del sistema operativo, pero el sistema operativo no puede solicitarla después. Es posible, pero requiere programas muy especializados que generalmente no es el caso.

Esto significa que una vez que macOS le ha otorgado a su programa, por ejemplo, 1 GB de RAM, el sistema operativo no puede recuperarlo cuando otros programas necesitan más memoria. Si quita memoria de los programas que no están especialmente diseñados para permitir eso, se bloquearán efectivamente tan pronto como intenten usar la memoria perdida.