À l'occasion, nous souhaitons suspendre les processus gourmands en mémoire sur nos serveurs Ubuntu et OS X pour libérer temporairement de la RAM pour d'autres tâches. Si tout ce qui nous inquiétait était l'utilisation du processeur, un simple Ctrl-Z
fonctionnerait. Cependant, nous devons être en mesure de libérer de la RAM (en l'écrivant sur le disque) puis de redémarrer le processus (disque -> RAM) ou en d'autres termes "mettre en veille prolongée" un seul processus. Des indices sur la façon de procéder? (De préférence de CLI.) Merci.
22
Réponses:
Il n'y a pas de facilité générale d'hibernation d'un seul processus, uniquement l'ensemble du système.
Cependant, si vous ne vous souciez pas que l'image de processus ne survivra pas à un redémarrage, il existe une fonction intégrée pour enregistrer l'image de processus sur le disque: l'échange. Assurez-vous que vous avez suffisamment d'espace de swap, et s'il y a une pression mémoire et que le processus n'est pas actif (par exemple parce qu'il est suspendu), sa mémoire sera permutée.
Si vous savez que le processus est susceptible d'être inactif pendant longtemps et que vous allez avoir besoin d'un temps de réponse rapide à un moment donné, vous pouvez forcer la libération de beaucoup de RAM maintenant en allouant beaucoup de RAM dans un processus de courte durée, par exemple
Vous n'avez aucun contrôle sur ce qui est échangé, d'autres processus peuvent donc être échangé. Sous Linux, vous pouvez échanger un processus en accédant de force aux pages qu'il mappe. Le script de cette réponse fera cela: charger en mémoire toutes les pages mappées par un processus (notez que cela inclut les fichiers ouverts; vous pouvez parcourir les régions de manière sélective en fonction des informations de la carte pour éviter d'échanger des données dont vous savez que vous n'aurez pas besoin , voir cette réponse pour plus d'informations).
la source
Le terme que vous recherchez est " Application checkpointing ".
Les outils que je connais qui peuvent le faire sont CryoPID et CryoPID2 .
Les deux outils sont uniquement pour Linux.
Je ne connais pas d'outil similaire pour BSD ou OS X.
la source
Assurez-vous d'avoir suffisamment d'espace de swap. Assurez-vous que votre système est configuré pour préférer permuter les pages inactives ( vm.swappiness = 100 ). Il devrait alors suffire de suspendre le processus. Le noyau préférera échanger les pages inactives.
la source
Sur Mac OS X, vous pouvez essayer d'utiliser la
purge
commande (fournie avec Xcode) pour libérer de la RAM (inactive).la source
purge
n'aiderait pas ici. Il supprime le cache disque, mais cela n'entraînera pas l'échange de la mémoire d'un processus, et il ne sera pas plus rapide pour un autre processus d'obtenir de la RAM.