72 votes

Linux : comment déswapper explicitement tout ce qui est possible ?

J'ai lancé quelque chose qui prenait beaucoup de mémoire et maintenant tout est très lent. Je suppose que la mémoire de toutes les applications a été transférée dans la mémoire d'échange afin de libérer de l'espace pour le processus gourmand en mémoire, et maintenant tout retourne lentement à la RAM lors des accès.

Existe-t-il un moyen de déplacer explicitement tout ce qui est possible du swap vers la RAM ? Ou peut-être pas tout, mais seulement certaines données de processus particuliers ?

1voto

Maximus Minimus Points 8917

Si vous êtes en mesure de redémarrer le système, cela devrait suffire (et prendre beaucoup moins de temps que d'essayer toute autre solution).

1voto

Karim Points 8533

Je vous déconseille d'essayer de repenser le sous-système VM dans le noyau. Il est EXTRÊMEMENT improbable que vous ayez suffisamment d'informations pour prendre de meilleures décisions que lui. Et si vous le forcez d'une manière ou d'une autre à faire la mauvaise chose, alors vous finirez par rendre les choses encore plus lentes.

12 votes

Il y a des cas où je veux faire ce que le PO veut. Si je laisse accidentellement un processus se déchaîner et prendre toute ma RAM+swap, alors je peux soit attendre 15 secondes à chaque fois que je change d'application pour que sa mémoire sorte du swap, soit le forcer et tout fonctionnera aussi vite que d'habitude.

1 votes

Eh bien... je veux que le "unswap" se produise pendant ma pause café, et non pas à chaque fois que j'essaie de changer d'application. Est-ce que le fait de vouloir informer le sous-système VM de l'imminence d'une pause-café constitue une erreur de jugement ?

0voto

jdoss Points 21

Le processus est-il toujours en cours ? Ouvrez un terminal et voyez si vous pouvez repérer le ou les processus qui ont été lancés. (ps aux |grep processname peut rendre la tâche un peu plus facile) Utilisez kill -9 PID pour les tuer s'ils sont toujours en cours d'exécution. Faites attention à ce que vous supprimez. Si vous ne savez pas quel est le processus, ne le tuez pas ! De plus, postez la sortie de free -m pour que nous puissions voir si vous utilisez toujours beaucoup de swap.

Si les choses fonctionnent toujours lentement, il se peut que ce que vous avez lancé fonctionne encore. Je ne désactiverais jamais le swap à moins que vous ne sachiez vraiment ce que vous faites ou que vous aimiez vivre à la limite. =)

0voto

ZarathustrA Points 101

Je pense qu'il n'existe pas de moyen vraiment efficace pour forcer Linux à déplacer les données du disque vers la mémoire. Lorsque swapoff/swapon est une solution fonctionnelle, mais elle est sale et peut facilement rendre votre système instable. Pour les cas où vous avez plus de données dans le swap que de mémoire libre, il sera difficile d'imaginer une politique efficace que Linux puisse employer pour décider quels morceaux de données se déplacent en mémoire et quels morceaux restent sur le disque.

Résumé : Laissez Linux restaurer progressivement ses performances de manière normale. Son sous-système VM est organisé de telle manière qu'il s'efforce et se déplace constamment vers un état d'équilibre idéal.

-2voto

nex3 Points 4309

Vider le cache des tampons

Si vous voulez les vider, vous pouvez utiliser cette chaîne de commandes.

$ free && sync && echo 3 > /proc/sys/vm/drop_caches && free

             total       used       free     shared    buffers     cached
Mem:       1018916     980832      38084          0      46924     355764
-/+ buffers/cache:     578144     440772
Swap:      2064376        128    2064248
             total       used       free     shared    buffers     cached
Mem:       1018916     685008     333908          0        224     108252
-/+ buffers/cache:     576532     442384
Swap:      2064376        128    2064248

Vous pouvez signaler au noyau Linux d'abandonner divers aspects des éléments mis en cache en modifiant l'argument numérique de la commande ci-dessus.

NOTE : nettoyer la mémoire des choses inutiles (noyau 2.6.16 ou plus récent). Assurez-vous toujours d'exécuter sync en premier afin de vider les choses utiles sur le disque !

  • Pour libérer le pagecache :

    $ echo 1 > /proc/sys/vm/drop_caches
  • Pour libérer les dentures et les inodes :

    $ echo 2 > /proc/sys/vm/drop_caches
  • Pour libérer le pagecache, les dentries et les inodes :

    $ echo 3 > /proc/sys/vm/drop_caches

Les programmes ci-dessus sont destinés à être exécutés en tant que root. Si vous essayez de les exécuter en utilisant sudo, vous devrez modifier légèrement la syntaxe pour obtenir quelque chose comme ceci :

$ sudo sh -c 'echo 1 >/proc/sys/vm/drop_caches'
$ sudo sh -c 'echo 2 >/proc/sys/vm/drop_caches'
$ sudo sh -c 'echo 3 >/proc/sys/vm/drop_caches'

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X