Si mon bureau manque de mémoire et échange beaucoup, je libère ou tue l'application en gaspillant ma RAM. Mais, après cela, tous mes postes de travail / applications ont été échangés et sont horriblement lents, connaissez-vous un moyen de «décompresser» (recharger de l'espace de swap dans la RAM) mon bureau / applications?
20
swapon
/swapoff
(comme le suggère la réponse actuellement acceptée), vous souhaiterez peut-être annuler l'échange de votre gestionnaire d'affichage et de tous ses enfants en vidant leurs mémoires de processus (ce qui force l'annulation de l'échange). Voir aussi «Comment forcer un processus zsh échangé à swap dedans?» Sur stackoverflow.Réponses:
Si vous avez vraiment suffisamment de RAM disponible, vous pouvez utiliser cette séquence (en tant que root):
(pour forcer le swap-in explicite de toutes vos applications)
(en supposant que vous utilisez linux)
la source
Le script python rapide et sale suivant vide la mémoire d'un processus vers stdout. Cela a pour effet secondaire de charger une page ou un fichier mappé. Appelez-le comme
cat_proc_mem 123 456 789
où les arguments sont des ID de processus.Ce script est complètement spécifique à Linux. Il peut être adaptable à d'autres systèmes avec une
/proc
structure similaire (Solaris?), Mais oubliez de l'exécuter par exemple sur * BSD. Même sous Linux, vous devrez peut-être modifier la définitionc_pid_t
et les valeurs dePTRACE_ATTACH
etPTRACE_DETACH
. Il s'agit d'un script de preuve de principe, non pas comme un exemple de bonnes pratiques de programmation. À utiliser à vos risques et périls.Linux rend la mémoire d'un processus disponible en
/proc/$pid/mem
. Seules certaines plages d'adresses sont lisibles. Ces plages peuvent être trouvées en lisant les informations de mappage de mémoire dans le fichier texte/proc/$pid/maps
. Le pseudo-fichier/proc/$pid/mem
ne peut pas être lu par tous les processus autorisés à le lire: le processus lecteur doit avoir appeléptrace(PTRACE_ATTACH, $pid)
.Voir aussi plus d'informations sur
/proc/$pid/mem
.la source
kill -CONT 1234
où 1234 est le PID) pour le reprendre.Juste pour être complet, GDB peut vider l'image du processus. Je n'ai pas vérifié qu'il le déséchange, mais il doit --- il n'y a pas d'autre moyen de lire toute la mémoire du processus:
gdb -p $mypid
suivi de
(gdb) gcore /tmp/myprocess-core
Saved corefile /tmp/myprocess-core
la source
gcore $pid
est également disponible en dehors de gdb (en tant que petit script wrapper)gdb --batch -p $pid -ex "gcore /dev/null" 2>/dev/null
swapon / swapoff effacera complètement votre espace de swap, mais vous pouvez également en libérer une partie via le système de fichiers / proc. Vous voulez le premier:
via http://linux-mm.org/Drop_Caches
la source
sysctl vm.drop_caches=X
. De plus, sysctl est plus facile à sudo.