Vraag Hoe leeg te wisselen als er vrije RAM is?


Wanneer ik een RAM-intensieve app open (VirtualBox ingesteld op 2 GB RAM), wordt er meestal enige swapruimte gebruikt, afhankelijk van wat ik op dat moment nog open heb.

Wanneer ik echter de laatste toepassing afsluit, wordt de 2 GB RAM vrijgemaakt, maar het gebruik van dezelfde swapruimte blijft behouden.

Bijvoorbeeld, nu, ongeveer twee uur na het sluiten van VirtualBox, heb ik 1,6 GB aan gratis RAM en nog steeds 770 MB aan swap.

Hoe kan ik Ubuntu vertellen om te stoppen met het gebruik van die swap en terug te gaan naar het gebruik van de RAM?


255
2017-08-06 06:43


oorsprong


Het gemakkelijkste ding start uw apparaat opnieuw op en bespaar tijd van coping om te rammen en gratis RAM-geheugen te sparen voor laptop- en CPU-temperatuur - Mohamed Slama
Grote veronderstelling dat het herbevolken van alle dingen op je computer minder tijd kost. - jQwierdy


antwoorden:


Alleen omdat swap is toegewezen, wil nog niet zeggen dat het wordt 'gebruikt'. Hoewel programma's zoals systeemmonitor en top sommige van uw toegewezen swapruimte (in uw voorbeeld 770 MB) zullen tonen, betekent dit niet dat het systeem actief in / uit ruilt.

Om te weten of er iets in / uit ruilt, kunt u de vmstat opdracht. Laat het een paar seconden lopen om te settelen en bekijk het si (swapin) en so (swapout) kolommen. Als er niets gebeurt, is er geen reden om bezorgd te zijn.

Dit is de uitvoer van hardlopen vmstat 1, waar je kunt zien dat mijn machine helemaal niet ruilt.

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0  78588 230788   9596  72196    0    0     0     0  543  652 12  6 78  0
 0  0  78588 230780   9596  72196    0    0     0     0  531  410  1  0 99  0
 0  0  78588 230796   9596  72196    0    0     0     0  300  335  1  1 97  0
 1  0  78588 230788   9608  72224    0    0    40     0  737  762  4  4 84  8
 5  0  78588 230788   9608  72224    0    0     0     0  415  385  9  3 84  0
 0  0  78588 230540   9616  72224    0    0     0    44  611  556 55  5 31  0
 0  0  78588 230532   9616  72224    0    0     0     0  574  662  1  6 89  0

Toch hier binnen top je kunt zien dat ik swap-ruimte heb toegewezen:

Mem:    475236k total,   245076k used,   230160k free,     9720k buffers
Swap:   491512k total,    78588k used,   412924k free,    72476k cached

146
2017-08-06 10:04



"Geen reden om bezorgd te zijn", tot het moment dat ik een applicatie bleef gebruiken die werd geruild. dan breekt de hel los. - törzsmókus
Dit bericht geeft geen antwoord op de vraag. - emchristiansen
Het uitgangspunt van de vraag is gebaseerd op misvattingen. Dit bericht gaat in op de misvattingen. - popey
Ik zie geen misvatting, ik zie een meningsverschil over wat "gebruikt" betekent. U bedoelt "gebruikt" om te verwijzen naar actief in / uitwisselen, terwijl de oorspronkelijke vraag lijkt te zijn gesteld met "gebruikt", wat betekent dat er gegevens zijn die zijn uitgewisseld, die later wellicht opnieuw moeten worden geruild. Er zijn geldige redenen om de ruil te willen doorspoelen na een gebeurtenis die veel ander geheugen uitwisselt, in hoofdzaak vooruitlopend op de actieve ruil waarvan de gebruiker weet dat deze later zal plaatsvinden (vooral als de latere 'de-swapping' waarschijnlijk zal plaatsvinden schijf is om andere redenen belast). - drfrogsplat
Na het uitvoeren van een geheugenintensieve applicatie, zijn mijn andere applicaties niet repressief als ik er naar overschakel, waarschijnlijk als gevolg van het swappen. Een manier om het systeem te vertellen om zoveel mogelijk gegevens ongedaan te maken (gevolgd door een koffiepauze) zou beter zijn dan 20 seconden te moeten wachten telkens als ik Alt + Tab. - Mark K Cowan


De Linux-kernel die ten grondslag ligt aan Ubuntu zal deze pagina's automatisch naar behoefte van schijf naar RAM "inruilen", dus in het algemeen zou ik zeggen dat het gewoon op natuurlijke wijze gebeurt.

Als je echt het gevoel hebt dat je het moet forceren, (ik zie een scenario waarin je zou willen weten dat het systeem later zal reageren) kun je tijdelijk swap uitzetten en weer inschakelen

sudo swapoff -a
sudo swapon -a

OF als alternatief als een enkel commando

swapoff -a && swapon -a

Wees voorzichtig hiermee, omdat u uw systeem onstabiel kunt maken, vooral als het al over weinig RAM beschikt.


348
2017-08-06 06:47



Dat deed het, de wissel werd gekopieerd. Ik denk dat je er alleen voor moet zorgen dat je tenminste de hoeveelheid swap gebruikt die je als gratis ram gebruikt voordat je swap-off uitvoert, toch? - jfoucher
De swap is niet naar RAM gekopieerd. Het was alleen uitgeschakeld. U moet ervoor zorgen dat de box niet wordt verwisseld voordat u dit doet. Als je dat doet, zal de kernel het geheugen zien verdwijnen en zal de OOM-moordenaar waarschijnlijk beginnen met het willekeurig doden van applicaties. Er is geen reden waarom je de ruil op deze manier zou moeten 'opruimen'. (zie mijn andere opmerking) :) - popey
Eigenlijk wordt de swap in feite gekopieerd om te rammen, of beter gezegd, de pagina's worden weer van schijf naar RAM geruild voordat de swap kan worden uitgeschakeld. - SpamapS
De pagina's worden alleen gekopieerd naar RAM als ze nog steeds nodig zijn voor een bepaald proces. Soms hoort een verwisselde pagina bij een proces dat al is voltooid en het kan de kernel niet schelen om deze pagina's onmiddellijk uit te wisselen. - BrunoJCM
Dit zou het juiste antwoord moeten zijn, omdat het de manier is om de verwisselde pagina's terug naar het RAM te krijgen en vervolgens het wisselgeheugen te legen - Alfonso Jiménez


Je kunt ook je "swappiness" -waarde instellen op de standaardwaarde van 60, zodat de swap in eerste instantie niet zo groot wordt. Waarom de standaardwaarde voor verzending is ingesteld op 60 als de aanbevolen waarde 10 is, verontrust me. Van de Ubuntu SwapFAQ:

De standaardinstelling in Ubuntu is swappiness = 60. Het verlagen van de standaardwaarde van swappiness zal waarschijnlijk de algehele prestaties voor een typische Ubuntu-desktopinstallatie verbeteren. Een waarde van swappiness = 10 wordt aanbevolen, maar voel je vrij om te experimenteren.

Door deze waarde te wijzigen in 10 of zelfs 0, kunt u een aanzienlijke en waarneembare snelheidsboost toevoegen aan een ouder systeem met een langzame schijf. Als je deze waarde instelt op 0, wordt het niet verwisseld voor Linux kernel 3.4 en lager, maar met 3.5+ doet het dat, dus je wilt een waarde van 1 gebruiken als je het op de laagste instelling wilt houden *.

Ik zie geen reden om dit niet op 0 te zetten, omdat alles wat de schijf raakt langzamer is dan RAM. Ik heb 8 virtuele kernen, een snelle SSD en 8 GB geheugen en mijn swap is ingesteld op 0. Vanaf dit moment heb ik 3 virtuele machines, mijn geheugengebruik is 7,1 van 7,7 GB, mijn gebruikte swap is slechts 576 KB aan 952 MB en alle systemen werken soepel!

Van de Ubuntu SwapFAQ:

De swappiness-parameter bepaalt de neiging van de kernel om processen uit het fysieke geheugen en naar de verwisselbare schijf te verplaatsen. Omdat schijven veel langzamer zijn dan RAM, kan dit leiden tot tragere reactietijden voor systeem en toepassingen als processen te agressief uit het geheugen worden verplaatst.

  1. swappiness kan een waarde tussen 0 en 100 hebben
  2. swappiness = 0 vertelt de kernel om te voorkomen dat processen zo lang mogelijk uit het fysieke geheugen worden geruild
  3. swappiness = 100 vertelt de kernel om processen agressief uit het fysieke geheugen te wisselen en ze te verplaatsen naar cache verwisselen

Hieronder volgen basisinstructies voor het controleren van swappiness, het legen van uw swap en het wijzigen van de swappiness in 0:

Om de swappiness-waarde te controleren:

cat /proc/sys/vm/swappiness

Om swap tijdelijk in te stellen op 0 (zoals voorgesteld door SpamapS):

Hiermee leeg je je swap en breng je alle swap terug naar het geheugen. Zorg er eerst voor dat je voldoende geheugen beschikbaar hebt door het bronnen-tabblad van gnome-system-monitor te bekijken, je vrije geheugen zou groter moeten zijn dan je gebruikte swap. Dit proces kan enige tijd duren, gebruik gnome-system-monitor om de voortgang te controleren en te verifiëren.

sudo swapoff --all

Om de nieuwe waarde in te stellen op 0:

sudo sysctl vm.swappiness=0 

Om terug te swappen:

sudo swapon --all

Om swappiness permanent in te stellen op 0:

  1. sudoedit /etc/sysctl.conf 
  2. Voeg deze regel toe vm.swappiness = 0 
  3. sudo shutdown -r now # herstart systeem

* Met kernelversie 3.5+ instellen swappiness op 0 schakelt het helemaal uit en een instelling van 1 wordt aanbevolen als u het laagste swappiness-algoritme wilt. bron: https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/


119
2018-06-11 14:10



Dit zou het geaccepteerde antwoord moeten zijn. - quant
Ik heb zojuist het antwoord bijgewerkt met een permanente manier om swappiness in te stellen. Ik weet niet zeker hoe het zo opgestoken was, ik vermoed dat niemand het heeft getest. - Elijah Lynn
Meer goede resultaten bij swappiness in dit antwoord => askubuntu.com/a/103916/11929 - Elijah Lynn
Een opmerking toegevoegd over het gedrag van swappiness = 0 veranderen met Linux kernel versie 3.5+. - Elijah Lynn
Ik weet niet zeker of dit beschikbaar was toen de auteur het antwoord oorspronkelijk plaatste, maar er is een swappiness-waarde van "60" voor ubuntu-serverinstallaties, omdat die omgeving andere specificaties heeft voor de prestaties. help.ubuntu.com/community/... - Frito


Ik heb gemerkt dat het legen van swap veel kan helpen op systemen met trage schijven en beperkte RAM. Natuurlijk, zoals al vermeld, is de manier om dit te doen, rennen sudo swapoff -a; sudo swapon -a. Het probleem hier is dat als er onvoldoende RAM is, dit voor allerlei problemen zorgt.

Ik heb een script geschreven dat ik bel toggle_swap dat heeft de afgelopen jaren voor mij gewerkt. Het controleert op voldoende vrije RAM voordat de swap daadwerkelijk wordt uitgeschakeld. Hier is het:

#!/bin/bash

free_data="$(free)"
mem_data="$(echo "$free_data" | grep 'Mem:')"
free_mem="$(echo "$mem_data" | awk '{print $4}')"
buffers="$(echo "$mem_data" | awk '{print $6}')"
cache="$(echo "$mem_data" | awk '{print $7}')"
total_free=$((free_mem + buffers + cache))
used_swap="$(echo "$free_data" | grep 'Swap:' | awk '{print $3}')"

echo -e "Free memory:\t$total_free kB ($((total_free / 1024)) MB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MB)"
if [[ $used_swap -eq 0 ]]; then
    echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $total_free ]]; then
    echo "Freeing swap..."
    sudo swapoff -a
    sudo swapon -a
else
    echo "Not enough free memory. Exiting."
    exit 1
fi

46
2017-12-25 16:35



Dit was echt nuttig, dank je! - Luke Cousins
Hé, dit is de beste oplossing. Bedankt! - Fabio A. Correa
Geweldig dat ik zoiets zocht. Misschien om een ​​beetje veiliger te zijn, kunt u het aantal en de percentages presenteren en vervolgens vragen, gewoon om absoluut zeker te zijn. - Atherion
Ik heb de code bijgewerkt en een gist-gebaseerd gemaakt gist.github.com/Jekis/6c8fe9dfb999fa76479058e2d769ee5c - Jekis
Dit is de conclusie die ik heb bereikt na het lezen van alle tips, zoals je op de een of andere manier moet zorgen dat er inderdaad voldoende RAM is voordat je de swap kunt doden. Bedankt meneer, prachtig script. Moet standaard in Ubuntu worden opgenomen (geen grap, het is echt een musthave.) - Shiki


Na wat gedoe met swappiness een paar dagen lang ben ik tot de conclusie gekomen dat de kernel aan zijn eigen apparaten moet worden overgelaten. Het weet wat het doet en het is geoptimaliseerd om u de beste ervaring te bieden.

Tenzij je een hele goede reden hebt om die schijf terug te willen, zou ik het laten.


23
2017-08-06 16:34



Ik had wat spullen in ruil, vmstat liet me zien dat swapin en swapout gebeurden en Chrome lag er niet mee, terwijl mijn CPU nauwelijks werd gebruikt. Goed genoeg reden, niet? - Xerus


Het heeft geen invloed op de prestaties als uw swapruimte bezet is. De enige prestatieboete is dat dingen in / uit swap gaan. Als er niets wordt geruild / geruild, hoef je je nergens zorgen over te maken.


1
2017-08-11 19:35



Ja maar als iets is het geruild worden doet de prestaties beïnvloeden, vandaar deze vraag. - quant