Je veux arrêter un long processus afin qu'il ne consomme pas de ressources CPU ou de mémoire physique, avec l'intention de reprendre le même processus à l'avenir.
Je sais que la partie CPU est réalisable en utilisant SIGSTOP
et des SIGCONT
signaux, mais est-il possible de paginer (échanger dans le cas de pages sales de processus) immédiatement la mémoire RSS privée d'un processus (arrêté)?
linux
process
swap
virtual-memory
idelvall
la source
la source
Réponses:
Vous pourriez étudier une technique appelée checkpoint / restore. Cela vous permettra de prendre un processus en cours et d'enregistrer son état dans un ensemble de fichiers, puis de le restaurer ultérieurement.
Pour l'utiliser, commencez par installer le programme criu [ git , wiki ] (
yum install criu
ouapt install criu
).Pour vérifier un processus en cours, créez un répertoire vide pour contenir ses fichiers et cd dans ce répertoire.
Maintenant, vérifiez le processus en cours. Dans ce cas, j'utilise le --shell-job car mon processus s'exécute dans un shell avec un tty associé.
404 est le pid du processus que je veux vérifier. Lorsque je fais cela, je vois que mon processus en cours d'exécution est tué et mon répertoire / var / tmp / checkpoint est rempli avec un ensemble de fichiers nécessaires pour le restaurer.
Pour restaurer le processus, je m'assure que je suis dans le répertoire avec les fichiers de point de contrôle et fais une restauration.
Le processus reprendra là où il s'était arrêté dans le terminal où il a été exécuté. Si je tue ce processus en cours et
criu restore --shell-job
recommence, le processus reviendra au point de contrôle et redémarrera.J'espère que cela t'aides.
la source
/tmp
c'est tmpfs (soutenu par de l'espace mémoire / swap). Si vous contrôlez un système de fichiers normal sur disque, vous pouvez alors utiliservmtouch -e
pour expulser les pages du cache de page, mais il utilise toujours de la RAM supplémentaire temporairement. (À moins d'criu
avoir une option pour faire des E / S directes (avec O_DIRECT) ...)