web-dev-qa-db-fra.com

Linux: comment annuler explicitement tout ce qui est possible?

J'ai lancé quelque chose qui prenait beaucoup de mémoire et maintenant tout est en retard. Je suppose que la mémoire de toutes les applications a été échangée afin de libérer de l'espace pour le processus gourmand en mémoire, et maintenant tout revient lentement à RAM lors de l'accès.

Existe-t-il un moyen de déplacer explicitement tout ce qui est possible du retour à la RAM? Ou peut-être pas tout, mais juste des données de processus particulières?

61
kolypto

Je recommanderais d'autoriser l'échange de contrôle de mémoire Linux normal dans les choses qui sont réellement utilisées, telles qu'elles sont utilisées.

La seule chose à laquelle je peux penser est de désactiver le swap, puis de le réactiver

Sudo swapoff -a
Sudo swapon -a

Cela suppose que vous disposez de suffisamment de mémoire physique disponible pour tout contenir en swap ...

61
Douglas Leeder

Vous pouvez l'accorder en faisant écho à un nombre compris entre 0 et 100 dans /proc/sys/vm/swappiness .

Ce contrôle est utilisé pour définir l'agressivité avec laquelle le noyau échangera les pages mémoire. Des valeurs plus élevées augmenteront l'agressivité, des valeurs plus faibles diminueront la quantité de swap . Une valeur de 0 indique au noyau de ne pas lancer l'échange tant que le nombre de pages libres et sauvegardées sur fichier est inférieur au niveau supérieur dans une zone.

La valeur par défaut est 60.

13
sntg

Linux fait un bon travail de gestion de la mémoire et vous ne devriez pas vous mettre en travers de son chemin. Le paramètre vm.swappiness (mentionné précédemment) ne fait pas obstacle. Vous êtes plus susceptible de rencontrer des problèmes étranges en faisant les choses d'une autre manière.

Qu'avez-vous lancé qui était si gourmand en mémoire? Peut-il être réglé? S'il n'a pas ses propres directives de limitation de mémoire, vous pouvez également consulter ulimit.

5
CarpeNoctem

Si vous avez la mémoire disponible pour toutes vos applications, il est correct de définir la permutation à 0 pour que les choses ne s'échangent pas. Par exemple, qemu-kvm est une grande cible que le VMM doit échanger, car il "semble" être inactif la plupart du temps. J'ai vu jusqu'à 80% de la mémoire d'une mémoire qemu-kvm être écrite pour permuter. Les machines virtuelles exécutées dans qemu-kvm ne répondront presque plus car elles manquent de swap (bien que l'invité ne sache pas que cela se produit). L'invité VM pensera qu'il fonctionne le mieux, même si en réalité il traîne terriblement. Quand je fais un tas de VM "se réveille" et commence à faire des choses, cela peut augmenter la moyenne de charge à plus de 30, même sur du matériel de niveau entreprise avec suffisamment de mémoire et de disque rapide. Je suppose que c'est un échec dans la conception qemu-kvm prête à l'emploi.

J'espère que cela aide quelqu'un.

3
Gruic

Je déconseille d'essayer de dépasser le sous-système VM dans le noyau. Il est EXTRÊMEMENT improbable que vous ayez réellement suffisamment d'informations pour prendre de meilleures décisions qu'il ne le fera. 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.

2
Michael Kohne

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

1
Maximus Minimus

Pour copier une partie de ma réponse de cette question .

Pour que vous sachiez comment fonctionne le swappiness tunable. Cela fonctionne en indiquant au sous-système VM de rechercher les pages à échanger lorsque le% de mémoire mappé pour traiter les tables de pages + la valeur d'échange est> 100. Ainsi, un paramètre de 60 entraînera le démarrage du système paginer les pages périmées de la table des pages de processus lorsqu'il utilise plus de 40% de la mémoire de votre système. Si vous voulez permettre à vos programmes d'utiliser plus de mémoire au détriment du cache, vous voudrez réduire la valeur de permutation.

1
3dinfluence

Je crois qu'il n'y a pas de très bon moyen de forcer Linux à échanger les données du disque vers la mémoire. Lorsque swapoff/swapon est une solution de travail, mais qu'elle est sale et peut facilement rendre votre système instable. Dans 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 utiliser pour décider quels éléments de données se déplacent en mémoire et quels éléments conservent sur le disque.

Résumé: laissez simplement 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.

0
ZarathustrA

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

Si les choses tournent toujours lentement, vous pouvez toujours avoir tout ce que vous avez lancé en cours d'exécution. Je n'activerais jamais l'échange à moins que vous ne sachiez vraiment ce que vous faites ou que vous aimiez vivre sur Edge. =)

0
jdoss