En ocasiones, nos gustaría suspender los procesos de uso intensivo de memoria en nuestros servidores Ubuntu y OS X para liberar temporalmente algo de RAM para otros trabajos. Si todo lo que nos preocupara fuera el uso de la CPU, un simple Ctrl-Z
funcionaría. Sin embargo, necesitamos poder liberar la RAM (escribiéndola en el disco) y luego reiniciar el proceso (disco -> RAM) o, en otras palabras, "hibernar" un solo proceso. ¿Alguna pista sobre cómo hacer esto? (Preferiblemente de CLI.) Gracias.
22
Respuestas:
No existe una instalación general para hibernar un solo proceso, solo todo el sistema.
Sin embargo, si no le importa que la imagen del proceso no sobreviva al reinicio, hay una función incorporada para guardar la imagen del proceso en el disco: intercambio. Asegúrese de tener suficiente espacio de intercambio, y si hay presión de memoria y el proceso no está activo (por ejemplo, porque está suspendido), su memoria se intercambiará.
Si sabe que es probable que el proceso permanezca inactivo durante mucho tiempo y que necesitará un tiempo de respuesta rápido en algún momento, puede forzar la liberación de una gran cantidad de RAM asignando mucha RAM en un proceso de corta duración, p. ej.
No obtienes ningún control sobre lo que se intercambia, por lo que otros procesos pueden intercambiarse. En Linux, puede volver a intercambiar un proceso accediendo por la fuerza a las páginas que asigna. El script en esta respuesta hará eso: cargar en la memoria todas las páginas mapeadas por un proceso (tenga en cuenta que esto incluye archivos abiertos; puede atravesar regiones selectivamente en función de la información del mapa para evitar el intercambio de datos que sabe que no necesitará) , vea esta respuesta para más información).
fuente
El término que está buscando es " Punto de verificación de la aplicación ".
Las herramientas que sé que pueden hacer eso son CryoPID y CryoPID2 .
Ambas herramientas son solo para Linux.
No conozco una herramienta similar para BSD u OS X.
fuente
Asegúrese de tener mucho espacio de intercambio. Asegúrese de que su sistema esté configurado para preferir intercambiar páginas inactivas ( vm.swappiness = 100 ). Entonces debería ser suficiente suspender el proceso. El núcleo preferirá intercambiar las páginas inactivas.
fuente
En Mac OS X, puede intentar usar el
purge
comando (proporcionado con Xcode) para liberar algo de RAM (inactiva).fuente
purge
No ayudaría aquí. Elimina la memoria caché del disco, pero eso no hará que se intercambie la memoria de un proceso, y no hará que sea más rápido para que otro proceso obtenga RAM.