Sådan ryddes RAM-hukommelsescache, buffer og swap-plads på Linux


Som ethvert andet operativsystem har GNU/Linux implementeret en hukommelsesstyring effektivt og endda mere end det. Men hvis en proces spiser din hukommelse, og du vil rydde den, giver Linux en måde at skylle eller rydde RAM-cache på.

Hvert Linux-system har tre muligheder for at rydde cache uden at afbryde processer eller tjenester.

1. Ryd kun PageCache.

# sync; echo 1 > /proc/sys/vm/drop_caches

2. Ryd tandlæger og inoder.

# sync; echo 2 > /proc/sys/vm/drop_caches

3. Ryd PageCache, tandlæger og inoder.

# sync; echo 3 > /proc/sys/vm/drop_caches 

Forklaring til ovenstående kommando.

synkronisering skyller filsystembufferen. Kommando Separeret af “;” køres sekventielt. Skallen venter på, at hver kommando afsluttes, før den næste kommando udføres i sekvensen. Som nævnt i kernedokumentationen vil skrivning til drop_cache rense cache uden at dræbe nogen applikation/service, kommandoeko gør jobbet med at skrive til fil.

Hvis du skal rydde diskcachen, er den første kommando sikrest i virksomhed og produktion, da “... echo 1>….” rydder kun PageCache. Det anbefales ikke at bruge den tredje mulighed over “... echo 3>” i produktionen, før du ved, hvad du laver, da det rydder PageCache, tandlæger og inoder.

Når du anvender forskellige indstillinger og vil kontrollere, om det faktisk er implementeret specielt på I/O-omfattende benchmark, skal du muligvis rydde buffercache. Du kan slippe cache som forklaret ovenfor uden at genstarte systemet, dvs. ingen nedetid krævet.

Linux er designet på en sådan måde, at det ser ud i diskcache, før det kigger på disken. Hvis den finder ressourcen i cachen, når anmodningen ikke til disken. Hvis vi renser cachen, vil diskcachen være mindre nyttig, da OS vil se efter ressourcen på disken.

Desuden vil det også sænke systemet i et par sekunder, mens cachen renses, og alle ressourcer, der kræves af OS, indlæses igen i disk-cachen.

Nu opretter vi et shell-script, der automatisk rydder RAM-cache dagligt kl. 02.00 via en cron-planlægningsopgave. Opret et shell-script clearcache.sh og tilføj følgende linjer.

#!/bin/bash
# Note, we are using "echo 3", but it is not recommended in production instead use "echo 1"
echo "echo 3 > /proc/sys/vm/drop_caches"

Indstil eksekveringstilladelse til clearcache.sh-filen.

# chmod 755 clearcache.sh

Nu kan du ringe til scriptet, når du har brug for at rydde RAM-cache.

Indstil nu en cron for at rydde RAM-cache hver dag kl. Åbn crontab til redigering.

# crontab -e

Tilføj nedenstående linje, gem og afslut for at køre den kl. 2 dagligt.

0  2  *  *  *  /path/to/clearcache.sh

For flere detaljer om, hvordan du cron et job, kan du se vores artikel om 11 Cron Scheduling Jobs.

Ingen! det er ikke. Tænk på en situation, hvor du har planlagt scriptet til at rydde RAM-cache hver dag kl. Hver dag klokken 02 udføres scriptet, og det skyller din RAM-cache. En dag af en eller anden grund kan være mere end forventet, at brugere er online på dit websted og søger ressource fra din server.

Samtidig kører det planlagte script og rydder alt i cachen. Nu henter alle brugerne data fra disken. Det vil resultere i servernedbrud og ødelægge databasen. Så ryd kun ram-cache, når det kræves, og kend dine fodtrin, ellers er du en Cargo Cult-systemadministrator.

Hvis du vil rydde swap-plads, kan du måske køre nedenstående kommando.

# swapoff -a && swapon -a

Du kan også tilføje ovenstående kommando til et cron-script ovenfor efter at have forstået al den tilknyttede risiko.

Nu vil vi kombinere begge ovenstående kommandoer i en enkelt kommando for at lave et ordentligt script til at rydde RAM-cache og bytte plads.

# echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'

OR

$ su -c "echo 3 >'/proc/sys/vm/drop_caches' && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'" root

Efter at have testet begge ovenstående kommandoer, kører vi kommandoen “free -h” før og efter kørsel af scriptet og kontrollerer cache.

Det er alt for nu, hvis du kunne lide artiklen, så glem ikke at give os din værdifulde feedback i kommentarerne for at fortælle os, hvad synes du, er det en god idé at rydde RAM-cache og buffer i produktion og Enterprise?