Vraag Linux: hoe kun je alles wat mogelijk is expliciet ongedaan maken?


Ik heb iets gelanceerd dat veel geheugen in beslag nam en nu is alles erg vertraagd. Ik vermoed dat het geheugen van alle applicaties is gaan ruilen om ruimte vrij te maken voor het geheugenintensieve proces, en nu keert alles langzaam terug naar het RAM-geheugen wanneer het wordt geopend.

Is er een manier om alles mogelijk te maken, van swap back to RAM? Of misschien niet alles, maar slechts enkele specifieke procesgegevens?


55
2018-02-07 18:24


oorsprong


Ik zou aanraden om gewoon normale bewerkingen toe te staan ​​om in te wisselen wat echt nodig is, in plaats van alles handmatig te doen. - Douglas Leeder


antwoorden:


Ik zou aanraden om de normale Linux-geheugenbesturing te laten swappen in de dingen die daadwerkelijk worden gebruikt, zoals ze worden gebruikt.

Het enige dat ik kan bedenken is om te ruilen en dan weer aan

sudo swapoff -a
sudo swapon -a

Dat veronderstelt dat je voldoende fysiek geheugen hebt om alles in ruil te bevatten ...


55
2018-02-07 18:38



Het werkt, heel langzaam hoor :) Bedankt! Maar toch geloof ik dat er een elegantere oplossing is :) - kolypto
Pas op met deze oplossing, het zal alles uit de ruil nemen met geweld ... als het niet past in het fysieke geheugen, start de kernel de dodelijke OOM moordenaar. Ik ken geen leuke "probeer alles naar het RAM-geheugen te verplaatsen, maar faal gracieus als het niet mogelijk is" commando. - Juliano
Ik heb het geprobeerd en ontdekte dat het erg langzaam werkt. Het is dus mogelijk om het vrije RAM-geheugen te controleren en te doden swapoff als het geheugen bijna leeg is: in dit geval zal swap-ruimte functioneel blijven :) - kolypto
Ik ben er niet zeker van dat het beëindigen van de operatie het beëindigen van de swapoff is. Hangt er vanaf hoe het geïmplementeerd is. - Douglas Leeder
Het lijkt erop dat de opdracht swapoff zoiets doet als "niet toestaan ​​dat nieuwe schrijfacties worden geruild", terwijl een ander lopend proces (dat een swap was / is) nog steeds "release swap" kan uitvoeren. Dit is misschien de reden waarom het zo traag lijkt te gaan. Het lijkt OOM's niet te veroorzaken zoals een andere persoon zei (ik gebruik Ubuntu Bionic) - waarschijnlijk zou dat alleen het geval zijn als "extra (of bestaande) processen nieuwe geheugen gaan gebruiken" (d.w.z. echte OOM's). Dus al met al is de swapoff / swapon een geweldige oplossing lijkt het. Gentle / stabiel. Dit veronderstelt dat u niet meer geheugen inschakelt met behulp van processen (of het verbruik in actieve processen verhoogt). - Roel


Je kunt het afstemmen op een nummer tussen 0 en 100 in /proc/sys/vm/swappiness.

Dit besturingselement wordt gebruikt om te definiëren hoe agressief de kernel zal wisselen   geheugenpagina's. Hogere waarden verhogen de agressiviteit, lagere waarden   verlaag de hoeveelheid swap. Een waarde van 0 instrueert de kernel om dat niet te doen   schakel swap in totdat het aantal gratis en bestandspagina's kleiner is   dan de hoogwatermarkering in een zone.

De standaardwaarde is 60.


11
2018-02-07 18:31



Gebruik / proc / sys niet rechtstreeks, gebruik de sysctl commando in plaats daarvan. In dit geval is het dat wel sysctl vm.swappiness=x. - Juliano
Ik denk niet dat zelfs een zwaai van nul ervoor zal zorgen dat pagina's die al zijn geruild expliciet in het hoofdgeheugen worden geplaatst? - Douglas Leeder
@Douglas heeft gelijk. vm.swappiness zal voornamelijk de beslissing bepalen of bewegende dingen moeten worden omgewisseld of de hoeveelheid caches en buffers moeten worden verlaagd wanneer geheugen wordt vereist. - Juliano
@ Juliano, waarom zou / proc / sys niet moeten worden gebruikt? - James
@James Omdat / proc / sys de interface op het lagere niveau is die wordt gebruikt om de kernelconfiguratie te wijzigen en te doorzoeken (het is "implementatiedetail"). Linux biedt het hogere niveau sysctl commando voor gebruikersinteractie. Het eindresultaat is hetzelfde, maar gewoonlijk hebben interfaces op een hoger niveau de voorkeur, zodat de gebruiker direct kan communiceren. Een beetje zoals het starten van de motor door kortsluiten van de ontstekingsdraden (lager niveau) in plaats van alleen de sleutel (hoger niveau) te draaien. - Juliano


Linux doet het prima als je het geheugen beheert en je moet het niet in de weg staan. De instelling vm.swappiness (eerder genoemd) komt niet in de weg. Je hebt meer kans om rare dingen te ervaren die de dingen op een andere manier doen.

Wat heb je gelanceerd dat zo hongerig was? Kan het worden afgestemd? Als het zijn eigen geheugenlimietrichtlijnen niet kent, kunt u ook naar ulimit kijken.


5
2018-02-08 03:25



In mijn geval was dat zo convert -density 200 file.pdf jpegs/file.jpg. Om een ​​of andere reden gebruikt het veel geheugen, maar je hebt gelijk: het kan worden afgestemd. Hoe dan ook, de situatie is mogelijk met elke toepassing :) - kolypto
Ik ben het eens met dit antwoord - u zou waarschijnlijk de normale bewerkingen op de machine moeten verlaten om in te wisselen wat werkelijk nodig is. - Douglas Leeder
convert heeft de -limit argument om het geheugen te beheersen versus het schijfgebruik, en u zou ze moeten lezen. omgeving -limit memory 512MB of vergelijkbaar zou goed zijn. Het zou waarschijnlijk ook goed zijn om een ​​expliciete MAGICK_TEMPORARY_PATH op te geven en dat op te ruimen nadat je opdracht is voltooid. - slacy


Als u het geheugen beschikbaar hebt voor al uw toepassingen, is het goed om de swappiness in te stellen op 0, zodat dingen niet worden verwisseld. Qemu-kvm is bijvoorbeeld een groot doelwit voor de VMM om geruild te worden, omdat het "lijkt" het grootste deel van de tijd inactief te zijn. Ik zie dat tot 80% van het geheugen van een qemu-kvm-geheugen wordt geschreven om te wisselen. De VM's die in qemu-kvm draaien zullen bijna-niet-reagerend zijn omdat ze bijna zonder swap raken (hoewel de gast geen idee heeft dat dit gebeurt). De gast-VM zal denken dat hij het uitstekendst presteert, hoewel hij in werkelijkheid vreselijk meesleept. Wanneer ik veel VM's "wakker maak" en dingen ga doen, kan dit het laadgemiddelde oplopen tot boven de 30, zelfs op hardware van enterprise-klasse met voldoende snel geheugen en harde schijf. Ik denk dat dit een tekortkoming is in het out-of-the-box qemu-kvm-ontwerp.

Ik hoop dat dit iemand helpt.


3
2017-07-17 13:33





Als u het systeem opnieuw kunt opstarten dat het zou moeten doen (en mogelijk veel minder tijd kost dan een andere oplossing uit te proberen).


1
2018-02-07 23:46





Om een ​​deel van mijn antwoord te kopiëren deze vraag.

Zodat je weet hoe de swappiness-tunable werkt. Dit werkt door het VM-subsysteem te laten zoeken naar pagina's die moeten worden verwisseld wanneer het% geheugen dat is toegewezen aan procespaginatabellen + swappiness-waarde> 100 is. Een instelling van 60 zorgt er dus voor dat het systeem verouderde pagina's uit de procespaginatabel afloopt. wanneer het meer dan 40% van het geheugen van uw systeem gebruikt. Als u wilt toestaan ​​dat uw programma's meer geheugen gebruiken ten koste van de cache, moet u de swappiness-waarde verlagen.


1
2018-02-08 04:23



Ik denk niet dat hier het programmageheugen versus de cache het probleem is - ik denk dat het toepassingsgeheugen is versus ongebruikt geheugen. En ik denk niet dat zwakte daar invloed op heeft. - Douglas Leeder


Ik zou afraden om het VM-subsysteem in de kernel te overtuigen. Het is UITERST onwaarschijnlijk dat u daadwerkelijk voldoende informatie hebt om betere beslissingen te nemen dan dat het geval zal zijn. En als je het op de een of andere manier dwingt iets verkeerds te doen, dan maak je het uiteindelijk alleen maar langzamer.


1
2018-02-08 14:18



Er zijn enkele gevallen waarin ik wil doen wat het OP wil. Als ik per ongeluk een proces in de fout laat gaan en al mijn RAM + swap opneem, dan kan ik ofwel 15 seconden wachten elke keer dat ik tussen applicaties in het geheugen wissel om uit te wisselen of het gewoon forceren en alles zo snel als normaal laten draaien. - Alex
@Alex +1 voor het expliciet vermelden van de geldige use case die we allemaal in gedachten hebben. - Vortico


Is het proces nog steeds bezig? Open een terminal en kijk of u de processen kunt zien die zijn gestart. (ps aux | grep processnaam maakt het misschien een beetje eenvoudiger) Gebruik kill -9 PID om ze uit te schakelen als ze nog steeds actief zijn. Wees voorzichtig met wat je doodt. Als je niet weet wat het proces is, dood het dan niet! Plaats ook de uitvoer van free -m zodat we kunnen zien of je nog steeds veel swap gebruikt.

Als de zaken nog steeds traag verlopen, kun je nog steeds alles hebben wat je hebt gestart. Ik zou nooit de ruil uitschakelen, tenzij je echt weet wat je doet of als je graag op de rand leeft. =)


0
2018-02-08 04:02