Hur man rensar cacheminnet på Linux

How Clear Cache Linux



Linux -filsystemets cache (Page Cache) används för att göra IO -operationer snabbare. Under vissa omständigheter kanske en administratör eller utvecklare vill rensa cachen manuellt. I den här artikeln kommer vi att förklara hur Linux File System -cache fungerar. Sedan kommer vi att visa hur man övervakar cacheanvändningen och hur man rensar cachen. Vi kommer att göra några enkla prestandaexperiment för att verifiera att cachen fungerar som förväntat och att cachespolning och rensningsproceduren också fungerar som förväntat.

Hur Linux File System Cache fungerar

Kärnan reserverar en viss mängd systemminne för cachning av filsystemets diskåtkomst för att göra övergripande prestanda snabbare. Cacheminnet i Linux kallas Cachesida . Storleken på sidcacheminnet är konfigurerbar med generösa standardinställningar för att cacha stora mängder diskblock. Maxstorleken på cacheminnet och principerna för när data ska kastas ut från cachen är justerbara med kärnparametrar. Linux-cachemetoden kallas en skriv-tillbaka-cache. Det betyder att om data skrivs till hårddisken skrivs det till minnet i cacheminnet och markeras som smutsigt i cacheminnet tills det synkroniseras till hårddisken. Kärnan upprätthåller interna datastrukturer för att optimera vilka data som ska kastas ut från cacheminnet när mer utrymme behövs i cachen.







Under Linux -läsning av systemanrop kommer kärnan att kontrollera om de begärda uppgifterna är lagrade i block av data i cachen, det skulle vara en lyckad cache -träff och datan kommer att returneras från cachen utan att göra någon IO till skivsystemet. För en cachemiss kommer data att hämtas från IO -systemet och cacheminnet uppdateras baserat på cachingpolicyn eftersom samma data sannolikt kommer att begäras igen.



När vissa trösklar för minnesanvändning har uppnåtts börjar bakgrundsuppgifterna skriva smutsiga data till disken för att säkerställa att det rensar minnescachen. Dessa kan påverka prestanda för minne och CPU -intensiva applikationer och kräver justering av administratörer och eller utvecklare.



Använd gratiskommando för att visa cacheanvändning

Vi kan använda det fria kommandot från kommandoraden för att analysera systemminnet och mängden minne som tilldelats cachning. Se kommandot nedan:





#fri -m

Vad vi ser från fri kommandot ovan är att det finns 7,5 GB RAM -minne på detta system. Av detta används endast 209 MB och 6,5 MB är gratis. 667 MB används i buffertcachen. Låt oss nu försöka öka det antalet genom att köra ett kommando för att generera en fil på 1 Gigabyte och läsa filen. Kommandot nedan genererar cirka 100 MB slumpmässig data och lägger sedan till 10 kopior av filen tillsammans till en stor_fil .



# dd if =/dev/random of =/root/data_file count = 1400000
# för i i 'sek 1 10'; echo $ i; kattdatafil >> stor_fil; Gjort

Nu kommer vi att se till att läsa denna 1 Gig -fil och sedan kontrollera det fria kommandot igen:

# katt stor_fil> /dev /null
# gratis -m

Vi kan se användningen av buffertcacheminnet har ökat från 667 till 1735 megabyte, ungefär en gigabyte ökning av användningen av buffertcachen.

Kommando för Proc Sys VM Drop Caches

Linux -kärnan ger ett gränssnitt för att släppa cacheminnet, låt oss testa dessa kommandon och se effekterna på den fria inställningen.

# echo 1>/proc/sys/vm/drop_caches
# gratis -m

Vi kan se ovan att majoriteten av buffertcache -allokeringen frigjordes med detta kommando.

Experimentell verifiering av att drop caches fungerar

Kan vi göra en prestandavalidering av att använda cachen för att läsa filen? Låt oss läsa filen och skriva den tillbaka till /dev /null för att testa hur lång tid det tar att läsa filen från hårddisken. Vi kommer att ta det med tid kommando. Vi gör det här kommandot direkt efter att vi har rensat cachen med kommandona ovan.

Det tog 8,4 sekunder att läsa filen. Låt oss läsa det igen nu när filen ska vara i filsystemets cache och se hur lång tid det tar nu.

bom! Det tog bara .2 sekunder jämfört med 8,4 sekunder att läsa den när filen inte cachades. För att verifiera, låt oss upprepa detta igen genom att först rensa cachen och sedan läsa filen 2 gånger.

Det fungerade perfekt som förväntat. 8,5 sekunder för icke-cachad läsning och .2 sekunder för cachad läsning.

Slutsats

Sidcacheminnet aktiveras automatiskt på Linux -system och kommer att göra IO snabbare genom att lagra nyligen använda data i cacheminnet. Om du vill rensa cacheminnet manuellt kan du enkelt skicka ett ekokommando till /proc -filsystemet som anger att kärnan ska släppa cachen och frigöra minnet som används för cachen. Instruktionerna för att köra kommandot visades ovan i den här artikeln och experimentell validering av cachebeteendet före och efter spolning visades också.