- Linux käyttää kaiken käytettävissä olevan RAM-muistin välimuisteihin ja sivuvälimuistiin, joten pieni vapaan muistin määrä ei välttämättä tarkoita, että ongelma olisi olemassa.
- Swapin, zram/zswapin ja oikean vm.swappiness-asetuksen yhdistelmä mahdollistaa suorituskyvyn ja vakauden tasapainottamisen.
- cgroup v2, systemd-oomd ja työkalut, kuten earlyroom tai nohang, tarjoavat hienosäätöä muistin kuormitukseen ja OOM-tapahtumiin.
- Valvonta ilmaisilla työkaluilla, vmstatilla, htopilla, sarilla tai Glancesilla on avainasemassa pullonkaulojen havaitsemisessa ja muistinhallinnan optimoinnissa.
Jos hallinnoit järjestelmiä, työskentelet konttien parissa tai ylläpidät tuotantopalvelimia, muistinhallinnan perusteellinen ymmärtäminen Linuxissa ei ole enää valinnaista. Se on ero palvelimen välillä, joka käsittelee kuormituspiikkejä epäröimättä, ja sellaisen, joka kamppailee, siirtyy sotkutilaan tai päätyy käynnistämään pelätyn OOM-tappajan pahimmalla mahdollisella hetkellä.
Linux on suunniteltu käyttämään RAM-muistia mahdollisimman tehokkaasti: se tallentaa tiedostot välimuistiin, pakkaa sivuja, siirtää tietoja swap-tilaan ja priorisoi prosesseja erittäin tarkkojen käytäntöjen mukaisesti. Ulkopuolelta se saattaa vaikuttaa siltä, että se "kuluttaa paljon muistia" tai että "vapaata RAM-muistia ei ole koskaan", mutta todellisuudessa se pyrkii tarjoamaan maksimaalisen suorituskyvyn ja vakauden . Katsotaanpa askel askeleelta ja hieman "matala-teknologista" selitystä käyttäen, miten tämä kaikki toimii ja miten voit hienosäätää sitä edistyneillä tavoilla.
Muistin peruskäsitteet ja myytit Linuxissa

Ennen kuin alat sotkea ytimen parametreja tai liittää zramia kuin huomista ei olisi, on hyvä idea saada selkeä käsitys muistityypeistä, arkkitehtuurista ja siitä, miten järjestelmä näkee RAM-muistin.
Tietokoneen käsittelemän fyysisen muistin enimmäismäärä määräytyy käyttöjärjestelmän ja prosessorin arkkitehtuurin mukaan. 32-bittisessä järjestelmässä RAM-muistia on tyypillisesti rajoitettu 4 gigatavuun, kun taas 64-bittinen järjestelmä pystyy helposti käsittelemään kymmeniä tai satoja gigatavuja (teoriassa paljon enemmän, vaikka todellinen raja määräytyykin laitteiston mukaan).
Linuxissa kaikkea muistia hallitaan virtuaalimuistina . Tämä sisältää sekä fyysisen RAM-muistin että swap-tilan. RAM-muistia ei voi "venyttää" muuten kuin lisäämällä fyysisiä moduuleja, mutta virtuaalimuistia voidaan laajentaa käyttämällä levyjä (osioita tai swap-tiedostoja) ja edistyneitä mekanismeja, kuten zram tai zswap.
La fyysinen muisti (RAM) Se on nopea ja kallis resurssi: sinne ladataan prosesseja, kirjastoja, tiedostovälimuisteja, I/O-puskureita, jaettua muistia jne. Linuxilla on hyvin selkeä filosofia: jos RAM-muistia on vapaana, on parempi käyttää sitä välimuistina ja nopeuttaa käyttöä kuin jättää se tyhjäksi. Siksi työkaluissa, kuten free Se ei tarkoita, että sinulla olisi ongelma.
Levymuisti ( pysyvä tallennustila) on paljon hitaampaa. RAM-muisti vastaa nanosekunneissa, kun taas SSD-levy vastaa mikrosekunneissa tai millisekunneissa. Siksi järjestelmä pyrkii pitämään usein käytetyt tiedot RAM-muistissa ja turvautuu levyyn vain silloin, kun se on ehdottoman välttämätöntä: ladattaessa suoritettavia tiedostoja, luettaessa kylmädataa tai vaihdettaessa sivuja.
Virtuaalimuisti, sivut ja sisäiset ytimen rakenteet
Virtuaalimuisti on mekanismi, jolla Linux tarjoaa jokaiselle prosessille oman eristetyn ja suojatun osoiteavaruuden . Laitteisto ja ydin kääntävät virtuaaliosoitteet fyysisiksi osoitteiksi sivutaulukoiksi kutsuttujen rakenteiden avulla.
Pienin muistin hallintaan käytetty yksikkö on sivu , tyypillisesti 4 kt. Koko virtuaalimuistijärjestelmä pyörii sivujen ympärillä: ne allokoidaan, vapautetaan, vaihdetaan, tallennetaan välimuistiin ja niille annetaan erilaisia käyttöoikeuksia (vain luku, suoritus jne.).
Sivutaulukot ovat ytimen ylläpitämiä hierarkkisia rakenteita. Ne tallentavat kunkin prosessin jokaiselle virtuaalisivulle todellisen fyysisen sivun sijainnin (jos sellainen on olemassa), sen käyttöoikeudet ja nykyisen tilan. Tämä muunnos mahdollistaa prosessien eristämisen, sivujen jakamisen niiden välillä ja tiedostojen yhdistämisen suoraan muistiin.
Kun prosessi käyttää kelvollista osoitetta, mutta sivu ei ole vielä valmis käytettäväksi, tapahtuu sivuvirhe . Tämä voi olla kevyt (sivu on RAM-muistissa, mutta tilassa, joka vaatii päivitystä) tai kallis (sivu on levyllä, swap-tilassa tai tiedostossa ja se on tuotava RAM-muistiin). Jos sivuvirheistä tulee usein, järjestelmä hidastuu, koska se käyttää liikaa aikaa levyn lukemiseen.
Sivuvälimuisti on ytimen ylläpitämä tiedostosivujen välimuisti. Se tallentaa tiedostojen ja hakemistojen tietoja ja metatietoja levyn käytön vähentämiseksi. Tämä on yksi syy siihen , miksi Linux "näyttää" käyttävän kaiken RAM-muistin: todellisuudessa se hyödyntää muistia, jota sovellukset eivät aktiivisesti käytä, levyn käytön nopeuttamiseksi.
Muistityypit: tiedostovarmennettu, anonyymi ja miten ne liittyvät swapiin
Linuxissa tehdään yleensä ero tiedostomuistin ja anonyymin muistin välillä . Molemmat sijaitsevat RAM-muistissa, mutta niiden alkuperä ja mahdollinen varmuuskopiointi levylle ovat erilaiset.
Puhelu tiedostomuisti Se on se, jonka järjestelmätiedostot varmuuskopioivat: suoritettavat binääritiedostot, jaetut kirjastot, kartoitetut tiedot mmap tiedostosta jne. Tämä muisti voidaan hylätä ja ladata uudelleen alkuperäisestä tiedostosta, jos tilaa tarvitaan.
La anonyymi muisti Se on kaikki, mitä prosessi varaa ja mikä ei ole sidottu tiedostoon: dynaaminen keko, pino, yksityiset alueet MAP_ANONYMOUSja kopioinnin yhteydessä kirjoitettaessa kopioidut alueet fork()Tämä muisti on olemassa vain RAM-muistissa (tai swap-muistissa, jos sitä siirretään), ja sen ainoa mahdollinen varmuuskopio on juuri tuo swap-tila.
Kun ytimen täytyy vapauttaa RAM-muistia, se yrittää ensin vapauttaa sivuja, jotka se voi koota uudelleen: tyypillisesti sivuja sivuvälimuistista tai tiedostojen varmuuskopioimista alueilta. Vasta kun tilaa ei ole enää tai muistipaine on erittäin suuri, se alkaa siirtää anonyymiä muistia swap-tilaan , mikä on paljon kalliimpaa, mutta antaa järjestelmälle mahdollisuuden.
Muistipaine, isku ja OOM-tappaja
Muistipaine syntyy , kun vapaiden sivujen määrä laskee tiettyjen sisäisten kynnysarvojen alapuolelle. Ytimen on tällöin jatkuvasti työskenneltävä muistin vapauttamiseksi: tyhjennettävä välimuistia, kirjoitettava likaisia sivuja levylle, poistettava harvoin käytettyjä sivuja ja niin edelleen.
Suuri muistin käyttöpaine voi aiheuttaa hyvin selkeitä oireita: korkean viiveen verkkopalveluissa , hitaat graafiset käyttöliittymät, viivästyneet vastaukset etäistunnoista (SSH, VNC, RDP), nykivän hiiren, ikkunat, joiden reagointi kestää sekunteja jne. Tässä vaiheessa järjestelmä keskittyy enemmän selviytymiseen kuin hyödyllisen työn tekemiseen.
Sivujen thrash-virheitä tapahtuu , kun RAM-muisti ei riitä prosessien jatkuvasti käyttämien sivujen säilyttämiseen. Ydin alkaa vaihtaa sivuja jatkuvasti: se poistaa yhden sivun lisätäkseen toisen, mutta tarvitsee heti poistamansa sivun. Tuloksena on sivuvirheiden ja levyhakujen kierre, joka heikentää suorituskykyä.
Kun swap on käytössä, thrashing tarkoittaa, että anonyymit sivut liikkuvat edestakaisin RAM-muistin ja swap-tilan välillä, mikä kyllästää levyn. Ilman swapia ongelma siirtyy tiedostosivuihin: ne hylätään ja ladataan uudelleen toistuvasti tiedostojärjestelmästä, mikä voi myös tehdä koneesta käytännössä käyttökelvottoman.
Jos ydin ei vieläkään saa vapaata muistia, seuraava tulee käyttöön: Muistin loppumisen (OOM) mekanismiKun kaikki pudotettava, tiivistettävä tai vaihdettavissa oleva on käytetty loppuun, ydin laskee pistemäärän jokaiselle prosessille (oom_scoreja päättää, kumman uhraa. Prosessin suorittaa loppuun OOM-tappaja vapauttaakseen merkittävän määrän RAM-muistia ja välttääkseen täydellisen kaatumisen.
Vaihto: mikä se on, kuinka paljon siihen pitää laittaa ja miksi se ei ole "paholainen"
Swap-muistilla on huono maine, osittain vanhentuneiden neuvojen ja yksinkertaistusten, kuten "jos sinulla on paljon RAM-muistia, et tarvitse swap-muistia", vuoksi. Todellisuudessa swap-muisti on keskeinen osa Linuxin muistisuunnittelua, jopa järjestelmissä, joissa on paljon RAM-muistia.
Swap on levyllä (osiolla tai tiedostolla) oleva alue, jota ydin käyttää passiivisten muistisivujen tallentamiseen . Tämä mahdollistaa RAM-muistin vapauttamisen prosesseille, jotka sitä todella tarvitsevat. Se ei ole itse virtuaalimuistia, vaan yksi mekanismeista, jotka mahdollistavat sen.
Ilman swapia anonyymillä sivuilla ei ole paikkaa minne mennä muistin paineen kasvaessa. Ydin voi edelleen luottaa välimuisteihin ja tiedostoihin tallennettuihin sivuihin, mutta heti kun anonyymin muistin määrä nousee kriittisen korkeaksi, se on käytännössä pakotettu käynnistämään OOM-tappajan paljon aikaisemmin. Teknisesti Linux voi toimia ilman swapia, mutta käytännössä se on tarpeeton riski useimmissa tilanteissa.
Swap-tilan koon suhteen ei ole olemassa yhtä ainoaa reseptiä, mutta koneen roolista riippuen on olemassa joitakin melko kohtuullisia nykyaikaisia kriteerejä :
- Palvelimet ilman lepotilaa4–8 Gt swap-tilaa riittää yleensä puskuriksi, vaikka RAM-muistia olisi paljon. Muistiintensiivisissä palveluissa (tietokannat, virtualisointi) voit kasvattaa sen 1,5-kertaiseksi RAM-muistiin verrattuna, mutta prioriteetin tulisi olla fyysisen RAM-muistin lisääminen.
- Pöytätietokoneet ilman lepotilaaJos RAM-muistia on 16 Gt tai enemmän, 2–4 Gt swap-muistia on enemmän kuin tarpeeksi turvaverkoksi.
- Horrostilaa käyttävät laitteetSwap-muistin on oltava yhtä suuri tai hieman suurempi kuin RAM-muisti, koska järjestelmä dumpaa kaiken muistin sisällön siihen lepotilassa.
Vaihtotilatilan luominen on erittäin joustavaa. Voit käyttää erillistä osiota tai vaihtotiedostoa . Vaihtotiedosto on ihanteellinen, kun levysi on jo osioitu tai haluat säätää kokoa ilman koko järjestelmän uudelleenmäärittämistä.
Muistimittarit: ilmainen, vmstat, ps, RSS, PSS ja paljon muuta
Klassiset Linux-muistinhallintatyökalut voivat johtaa väärinkäsityksiin, jos et tiedä, mitä kukin sarake tarkoittaa. Komento free -h Se on yksinkertaisin tapa nähdä yhdellä silmäyksellä kokonaismuisti, käytetty muisti, vapaa muisti, välimuisti ja swap-muisti.
Uloskäynnillä free On tärkeää tarkastella riviä, joka vähentää puskurit ja välimuistin, koska kyseinen sarake osoittaa prosessien tosiasiallisesti käyttämä muisti, lukuun ottamatta sitä, mitä ydin käyttää välimuistina ja jonka se voi nopeasti vapauttaa tarvittaessa.
kanssa vmstat -s -S M Saat yksityiskohtaisemman yhteenvedon: kokonaismuisti, käytetty muisti, vapaa muisti, aktiivinen muisti, käyttämätön muisti, swap-välimuisti jne. Voit myös tarkastella /proc/meminfo nähdäksesi jokaisen mittarin yksityiskohtaisesti, vaikka tulos onkin kuivempi ja vähemmän käyttäjäystävällinen.
Selvittääksesi, mitkä prosessit vaikuttavat eniten RAM-muistiin, ps aux näyttää sarakkeita, kuten VSZ (virtuaalimuistin kokonaismäärä, jota prosessi voisi käyttää, jos se lataisi kaiken) ja RSS (Pysyvän joukon koko, todellinen RAM-muisti tällä hetkellä). Huomautus: RSS sisältää myös jaetun kirjastomuistin, joka lasketaan useita kertoja, jos useat prosessit käyttävät sitä.
Tässä tulee peliin PSS (Suhteellinen sarjan koko)joka jakaa jaettujen kirjastojen kustannukset niitä käyttävien prosessien kesken. PSS:n hankkimiseen helposti on olemassa työkaluja, kuten smem, erittäin hyödyllinen sen näkemiseen, mitkä sovellukset ovat todella "dataa kuluttavia" vääristämättä tietoja jaettujen kirjastojen vuoksi.
Muistin fragmentointi, pino, keko ja ulimit
Toinen vähemmän näkyvä muistinhallinnan osa-alue on fragmentoituminen . Voimme puhua sisäisestä fragmentoitumisesta (kun pyöristetyt lohkot allokoidaan 4, 8 tai 16 tavun kerrannaisina, jolloin jäljelle jää hyödytön osa) ja ulkoisesta fragmentoitumisesta (kun vapaata muistia on, mutta se on jaettu pieniin osiin, jotka estävät suuren yhtenäisen allokoinnin käytön).
Redisin kaltaisissa sovelluksissa näet joskus eroja järjestelmän ilmoittaman muistin (RSS) ja sovelluksen itsensä hyödylliseksi katsoman muistin välillä (used_memory). Tämä etäisyys johtuu yleensä suurelta osin ulkoinen pirstoutuminen, aukot, jotka järjestelmä laskee varatuiksi, mutta joita prosessi ei todellisuudessa käytä.
Prosessin muisti jaetaan käsitteellisesti pinoa ja kasaaPinoa käytetään paikallisiin muuttujiin ja funktiokutsuihin, kun taas kekoa käytetään dynaamisiin allokaatioihin. malloc() ja vastaavia. Kun tietorakenteet kasvavat pinon tallennuskapasiteettia suuremmiksi, ne otetaan pois keosta ja käsitellään osoittimien avulla.
Prosessia kohden pinon enimmäiskokoa voidaan säätää ulimit -a ja järjestelmän kokoonpanoja. Sen pienentäminen rajoittaa suurten paikallisten muuttujien määrää, kun taas sen lisääminen mahdollistaa useampien muuttujien käytön tai syvän rekursion. Tämän parametrin säätäminen voi auttaa hallitsemaan muistin käyttöä paremmin ja vähentämään tietyntyyppistä pirstoutumista, vaikka se ei olekaan ihmelääke.
Edistynyt valvonta ja diagnostiikka: top, htop, vmstat, sar ja paljon muuta
Voit aloittaa RAM-muistia kuluttavien prosessien paikantamisesta top Ja jos haluat jotain käyttäjäystävällisempää, esim. htopJälkimmäinen näyttää suorittimen, muistin ja swap-tilan käyttöpalkit ja mahdollistaa prosessien interaktiivisen lajittelun ja suodatuksen.
Debianissa ja sen johdannaisissa asenna htop kanssa sudo apt install htopAlmaLinuxissa ja muissa Red Hatin kaltaisissa järjestelmissä, joissa sudo dnf install htopSisällä ollessasi voit lajitella muistin mukaan, etsiä tiettyjä prosesseja ja tappaa ongelmallisia tehtäviä suoraan käyttöliittymästä.
Syvällisempää analyysia ja eräajotilaa varten vmstat 5 Se tarjoaa säännöllisesti tietoa prosesseista, muistista, sivutuksesta, lohko-I/O:sta, keskeytyksistä ja suorittimen ajoituksesta. Se on ihanteellinen muistin paineen kehittymisen seuraamiseen ajan kuluessa.
Jatko sysstat Se sisältää työkaluja, kuten sarjoiden avulla voit tallentaa ja analysoida muistin ja muiden resurssien käyttöä. Esimerkiksi sar -r 1 5 Se näyttää muistin ja swap-käytön joka sekunti viisi kertaa. Debianissa se asennetaan sudo apt install sysstatja AlmaLinuxissa sudo dnf install sysstat.
Jos tarvitset syvää ydintason virheenkorjausta, bpftrace Se on tehokas eBPF:ään perustuva työkalu. Sen avulla voit instrumentoida järjestelmäkutsuja, tarkkailla muistin käyttöä ja havaita pullonkauloja ilman uudelleenkääntämistä tai uudelleenkäynnistystä. Se asennetaan tyypillisesti sudo apt install bpftrace Debianin kaltaisissa järjestelmissä.
Käytännön muistinhallinta: swap, swappiness ja välimuistin tyhjennys
Monien palvelimien perustehtävä on tarkistaa swapin nykytila. kanssa swapon --show Sinulla on luettelo aktiivisista swap-laitteista ja -tiedostoista, niiden koosta, tyypistä ja prioriteetista. Jos sinun on lisättävä swap-tiedostoja lennossa, voit luoda tiedoston, jossa on fallocate, varmista luvat chmod 600, muotoile se mkswap ja aktivoi se swaponJotta siitä tulisi pysyvä, lisää vastaava merkintä kohtaan /etc/fstab.
Parametri vm.swappiness Tämä säätää, kuinka helposti ydin priorisoi sivunvaihdon käytön RAM-muistin täyttämisen jatkamisen sijaan. Se vaihtelee välillä 0–100. Matalat arvot (10–20) saavat järjestelmän välttämään sivunvaihtoa, kunnes se on ehdottoman välttämätöntä, kun taas korkeat arvot (60 tai enemmän) kannustavat järjestelmää siirtämään sivuja helpommin sivunvaihtoon vapaan RAM-muistin ylläpitämiseksi.
Palvelimilla, joilla on hitaita levyjä tai suuria tietokantoja, on usein kiinnostavaa vähennä swappiness-arvoaEsimerkiksi 10:een tai 20:een, ja sudo sysctl vm.swappiness=10Nopeaa ZRAM-muistia tai SSD-levyjä sisältävissä pöytätietokoneissa väliarvot, kuten 30–60, voivat tarjota hyvän tasapainon latenssin ja muistin käytön välillä.
Hyvän muistin tilanteissa on joskus tarpeen pakottaa välimuistin vapautus kanssa sudo sync && sudo sysctl -w vm.drop_caches=3Tämä tyhjentää suuren osan sivun välimuistista ja tiedostoista. Se on hyödyllinen toisinaan testaukseen tai muistin vapauttamiseen hyvin rajoitetuissa järjestelmissä, mutta sitä ei pitäisi käyttää rutiininomaisesti, koska se myös menettää välimuistin tarjoaman suorituskyvyn parannuksen.
Edistyneet ohjaustyökalut: cgroup v2, memory.pressure ja OOM käyttäjätilassa
Nykyaikaisissa järjestelmissä, jotka käyttävät systemd:tä ja cgroup v2:ta , muistinhallintaa voidaan hienosäätää prosessiryhmien avulla. cgroup v2 järjestää tehtävät hierarkioihin ja soveltaa resurssirajoituksia ja prioriteetteja (CPU, muisti, I/O) ryhmätasolla, ei vain yksittäisen prosessin tasolla.
Muistihierarkian sisällä parametrit, kuten memory.low Niiden avulla voit määrittää, että tiettyjen c-ryhmien muistia tulisi suojata paremmin globaalilta paineelta, kun taas toiset voivat olla kuluttavampia, jos RAM-muistia on vapautettava.
Tiedosto memory.pressure Se paljastaa erittäin hyödyllisiä mittareita: kuinka kauan kyseisen cgroupin tehtävät ovat olleet estettyinä muistin puutteen vuoksi, 10, 60 ja 300 sekunnin välein. Muunnos jonkin verran Se osoittaa, onko ainakin yksi tehtävä viivästynyt, ja koko Se heijastaa hetkiä, jolloin kaikkiin ryhmän tehtäviin vaikutettiin samanaikaisesti.
Ytimen OOM-tappajan lisäksi on syntynyt käyttäjätilan ratkaisuja, kuten aikaisin, nohang o systemd-oomdEarlyOOM valvoo RAM-muistia ja swap-muistia, ja kun ne putoavat tiettyjen kynnysarvojen alapuolelle, se lopettaa prosesseja ennakoivasti. oom_score korkeampi, palauttaen käytettävyyden ennen koneen jumiutumista.
NoHang menee askeleen pidemmälle: se tukee useampia valintakriteerejä , ottaa huomioon muistintarpeen ja integroituu hyvin edistyneisiin kokoonpanoihin, vaikka sen kehityksessä on ollut ylä- ja alamäkiä. Samaan aikaan systemd-oomd integroituu suoraan systemd:n ja cgroup v2:n kanssa, ja se on tällä hetkellä monien jakeluiden ensisijainen vaihtoehto muistin niukkuuden hallintaan älykkäämmin ja yksityiskohtaisemmin.
Modern Swap: zram, zswap ja laiteprioriteetit
"Klassisen" levynvaihdon lisäksi Linux tarjoaa moderneja mekanismeja, jotka parantavat suorituskykyä huomattavasti yhdistämällä RAM-muistin pakkaamisen ja valikoivan levyn käytön.
zram on kernel-moduuli, joka luo lohkoyksiköitä itse RAM-muistiin, jossa sivut tallennetaan pakatussa tilassa. Näitä käytetään tyypillisesti erittäin nopeina swap-laitteina: pakkaus ja purku kuluttavat jonkin verran prosessoritehoa, mutta saat lisää loogista muistikapasiteettia ja vähennät merkittävästi levyn käyttöä.
Monissa jakeluissa riittää asentaa zram-työkalut o zram-generaattori ja ota sen palvelu käyttöön. Esimerkiksi Debianissa voit käyttää sudo apt install zram-tools ja aktivoi zramswap systemd:n kanssa. AlmaLinuxissa, jossa sudo dnf install zram-generator ja sitä vastaava palvelu.
zswap puolestaan toimii pakattuna välimuistina levynvaihtoalueen edessä . Se yrittää ensin tallentaa vaihdetut sivut pakattuun RAM-muistiin; vasta kun tämä välimuisti on täynnä tai sivuista tulee ei-aktiivisia, se kirjoittaa varsinaiselle vaihtoalueelle. Tämä vähentää levyn I/O-lukua ja pidentää SSD-levyjen käyttöikää, mutta vähentää jonkin verran suorittimen käyttöä.
Useita vaihtolaitteita (esim. zram ja levytiedosto) yhdistettäessä on tärkeää säätää prioriteetit. kanssa swapon -p tai vaihtoehto pri= en /etc/fstab Sinä määrität, mitä laitetta käytetään ensin. Yleinen käytäntö on antaa korkea prioriteetti (esimerkiksi 100) zram-muistille ja alempi prioriteetti (10) levynvaihtomuistille, jotta ydin hyödyntää täysimääräisesti RAM-muistin pakattua vaihtotilaa ennen levyn käyttöä.
Palvelimiin sovellettu muistinhallinta: swap, palvelut ja tietoturva
Verkkopalvelimissa (Apache, Nginx), tietokannoissa (MySQL, MariaDB, MongoDB) tai resursseja kuluttavissa sovelluksissa muisti on kriittinen resurssi. RAM-muistin ja swap-muistin kokoonpano määrää suoraan, kuinka monta samanaikaista pyyntöä järjestelmä pystyy käsittelemään ennen kuin se alkaa vaikeutua.
Tietokantamoottorien, kuten MongoDB:n, tapauksessa on ratkaisevan tärkeää, että fyysinen RAM-muisti ylittää tietokannan vaatimukset ; muuten se alkaa käyttää swap-tilaa ja suorituskyky romahtaa RAM-muistin ja levyn käytön välisen merkittävän eron vuoksi. Sama pätee MySQL:ään/MariaDB:hen, jossa työkalut, kuten MySQLTuner, suosittelevat muistiparametreja käytettävissä olevan RAM-muistin perusteella.
Muistin tuhlaamisen välttämiseksi on suositeltavaa pysäyttää käyttämättömät palvelut ja siivota tarpeettomat säilöt, levykuvat ja Docker-taltiot. Kehitys- ja laadunvarmistusympäristöissä on erittäin helppo kerryttää unohdettuja resursseja, jotka varastavat gigatavuja RAM-muistia ja levytilaa kenenkään huomaamatta.
Myös turvallisuus vaikuttaa asiaan: tarpeettomat portit auki Ne lisäävät hyökkäyspinta-alaa. Järjestelmään tunkeutuva haittaohjelma voi esimerkiksi käynnistää louhintaprosesseja, jotka kuluttavat prosessoria ja muistia, ajoittaa tehtäviä crontab ja kaataa järjestelmän. Saapuvien ja lähtevien porttien tarkistaminen, kaiken tarpeettoman sulkeminen ja epäilyttävien cron-töiden puhdistaminen ovat osa järjestelmän perushygieniaa, joka myös suojaa muistiresursseja.
Muisti- ja tiedostojärjestelmät: ext4, XFS, Btrfs ja journalointi
Vaikka se saattaa vaikuttaa erilliseltä asialta, tiedostojärjestelmän valinta ja sen konfigurointi vaikuttavat myös muistin toimintaan ja I/O-kuormitukseen. Esimerkiksi Ext4 käyttää lokia, joka kuormituksesta riippuen voi aiheuttaa ylimääräistä painetta levylle ja sitä kautta välimuistin hallinnalle.
Vaativissa palvelinympäristöissä monet järjestelmänvalvojat valitsevat XFS:n tai jopa Btrfs:n . XFS toimii tyypillisesti erittäin hyvin suurten tiedostojen ja tehokkaiden järjestelmien kanssa. Btrfs tarjoaa edistyneitä ominaisuuksia, kuten tilannevedoksia, läpinäkyvää pakkausta ja alilevyjä, mutta se on jonkin verran monimutkaista ja versiosta ja jakelusta riippuen kypsyystasoa, josta keskustellaan edelleen kaikkien työkuormien kohdalla.
Ydin mukauttaa välimuisti- ja takaisinkirjoituskäytäntönsä tiedostojärjestelmän ominaisuuksiin, joten vaihtaminen ext4:stä XFS:ään tai Btrfs:ään vaikuttaa paitsi raakaan I/O:hon, myös siihen, miten RAM-muistia ja sivuvälimuistia käytetään luku- ja kirjoitustoimintojen puskurointiin.
Olennaiset graafiset työkalut ja apuohjelmat järjestelmänvalvojille
Vaikka terminaali on edelleen ylläpitäjien tärkein työkalu, on olemassa työkaluja, jotka helpottavat muistin ja resurssien hallintaa huomattavasti . Yksi niistä on Glances , reaaliaikainen valvontatyökalu, joka näyttää suorittimen, muistin, levyn, verkon ja prosessit yhdellä näytöllä. Valinnaisella verkkokäyttöliittymällä voi valvoa useita palvelimia selaimesta.
Nopeaan asennukseen Debianiin, yksinkertaisesti... sudo apt install glancesKatse täydentää erittäin hyvin htop, vmstat y sar, mikä antaa visuaalisemman yleiskuvan järjestelmän toiminnasta kuormituksen alaisena.
Graafisen palvelimenhallinnan saralla Cockpit tarjoaa käyttäjäystävällisen verkkokäyttöliittymän muistin, prosessien ja palveluiden valvontaan . Sen avulla voit hallita useita palvelimia yhdestä konsolista, käynnistää ja pysäyttää systemd-yksiköitä, valvoa swap- ja zram-käyttöä sekä tarkastella lokeja poistumatta selaimestasi.
Työpöytäjärjestelmissä monet jakelut integroivat oman resurssienvalvonnan, mutta ympäristöissä, joissa ei ole graafista käyttöliittymää tai joissa halutaan jotain kevyttä, näiden konsolityökalujen yhdistäminen mukautettuihin skripteihin antaa erinomaisen näkyvyyden muistin kulloiseenkin tilanteeseen.
Linuxin asianmukaiseen muistinhallintaan kuuluu ymmärrys siitä, miten ydin käyttää RAM-muistia, swapin, zramin ja zswapin roolit, miten cgroup v2 ja erilaiset muistin ulkopuoliset moduulit (OOM) reagoivat paineeseen, sekä mitä työkaluja järjestelmän valvontaan ja hienosäätöön on käytettävissä. Kun kaikki nämä osat – free-, vmstat-, PSS- ja memory.pressure-työkaluista zramiin, swappiness- ja systemd-oomd- työkaluihin – yhdistetään, "Linuxin RAM-muistia kuluttavan" ongelman kanssa ei enää tarvitse kamppailla, ja käytössä on hienosäädetty, vakaa järjestelmä, joka pystyy maksimoimaan laitteiston suorituskyvyn missä tahansa roolissa: palvelimella, työpöydällä tai kuormitetussa ympäristössä.