Quiero detener un proceso de larga ejecución para que no consuma recursos de CPU o memoria física, con la intención de reanudar el mismo proceso en el futuro.
Sé que la parte de la CPU se puede lograr usando señalesSIGSTOP
y SIGCONT
señales, pero ¿es posible extraer (intercambiar en el caso de páginas sucias del proceso) inmediatamente la memoria RSS privada de un proceso (detenido)?
linux
process
swap
virtual-memory
idelvall
fuente
fuente
Respuestas:
Puede buscar una técnica llamada punto de control / restauración. Esto le permitirá realizar un proceso en ejecución y guardar su estado en un conjunto de archivos, y luego restaurarlo en otro momento.
Para usarlo, comience instalando el programa criu [ git , wiki ] (
yum install criu
oapt install criu
).Para verificar un proceso en ejecución, cree un directorio vacío para guardar sus archivos y cd en ese directorio.
Ahora revise el proceso de ejecución. En este caso, estoy usando --shell-job ya que tengo mi proceso ejecutándose en un shell con un tty asociado.
404 es el pid del proceso que quiero verificar. Cuando hago esto, veo que mi proceso en ejecución se anula y mi directorio / var / tmp / checkpoint se llena con un conjunto de archivos necesarios para restaurarlo.
Para restaurar el proceso, me aseguro de estar en el directorio con los archivos de punto de control y hacer una restauración.
El proceso continuará donde lo dejó en la terminal donde se ejecutó. Si elimino este proceso en ejecución y
criu restore --shell-job
vuelvo a ejecutarlo , el proceso volverá al punto de control y se iniciará nuevamente.Espero que esto ayude.
fuente
/tmp
es tmpfs (respaldado por memoria / espacio de intercambio). Si selecciona un sistema de archivos con respaldo de disco normal, puede usarlovmtouch -e
para expulsar las páginas del caché de página, pero aún usa RAM adicional temporalmente. (A menos quecriu
tenga una opción para hacer E / S directas (con O_DIRECT) ...)