- Linux uporablja fizični pomnilnik kot predpomnilnik in medpomnilnike, zato malo "prostega" RAM-a ne pomeni nujno, da obstaja težava.
- Kombinacija RAM-a, swap-a, virtualnega pomnilnika in predpomnilnika strani omogoča izolacijo procesov in ohranja zmogljivost pri različnih obremenitvah.
- Orodja, kot so free, htop, vmstat, pmap in cgroupv2, olajšajo diagnosticiranje in omejevanje porabe pomnilnika s strani procesov in storitev.
- Tehnike, kot so zram, zswap, EarlyOOM ali systemd-oomd, izboljšajo odziv sistema na pritisk pomnilnika in preprečijo zrušitve.

Pri delu s strežniki ali namiznimi računalniki, ki temeljijo na Linuxu, upravljanje pomnilnika Je eden od stebrov Ti dejavniki razlikujejo med hitrim in počasnim sistemom. Ne glede na to, ali gre za Debian, Ubuntu, AlmaLinux, CentOS ali katero koli drugo distribucijo, je razumevanje, kako Linux ravna z RAM-om, swapom in drugimi notranjimi mehanizmi, ključnega pomena za preprečevanje zrušitev, izgube zmogljivosti ali težav s stabilnostjo.
Poleg tega v sodobnih okoljih, ki izvajajo zahtevne baze podatkov, vsebnike, polna namizja in težke aplikacije, preprosto "veliko RAM-a" ni dovolj: bistveno je vedeti Kako Linux uporablja pomnilnik, kaj indikatorji v resnici pomenijo v čem vidimo orodja, kot so top, htop, free o vmstatIn kakšne možnosti imamo za fino nastavitev delovanja jedra, swap-a, cgroups-ov ali mehanizmov, kot so zram, zswap, EarlyOOM ali systemd-oomd?
Osnove pomnilnika v Linuxu
Linux je zasnovan tako, da kar najbolje izkoristi razpoložljivi pomnilnik, zato se RAM skoraj nikoli ne zdi "prazen", ker ga jedro uporablja kot predpomnilnik diska, medpomnilniki in začasni pomnilnik za pospešitev dostopa do podatkov in aplikacij. To vodi do številnih nesporazumov: malo "prostega" pomnilnika ni sinonim za težavo, temveč za učinkovito delovanje sistema.
Skupna količina pomnilnika, ki jo lahko računalnik upravlja, je odvisna od arhitektura operacijskega sistema32-bitni sistem je običajno omejen na približno 4 GB naslovljivega pomnilnika, medtem ko 64-bitni sistem zlahka obdela več deset ali več sto gigabajtov. Teoretično 64-bitna arhitektura omogoča ogromne številke (več kot eksabajtov), čeprav je v praksi dejanska omejitev odvisna od uporabljene strojne opreme in jedra.
Linux združuje segmentacija in oštevilčenje strani za organizacijo pomnilnika. Pomnilnik je razdeljen na strani fiksne velikosti (običajno 4 KiB), po katerih je mogoče poizvedovati z getconf PAGESIZE) in jedro upravlja notranje strukture, imenovane tabele strani, za prevajanje virtualnih naslovov v fizične naslove, dodeljevanje dovoljenj in nadzor stanja vsake strani.
Fizični spomin, torej RAM, nameščen v računalnikuJe drag, a izjemno hiter vir. Linux ga uporablja za izvajanje procesov, predpomnilnike podatkov, skupni pomnilnik, vhodno/izhodne medpomnilnike in notranje strukture jedra. Ko procesi ne zapolnijo vsega RAM-a, sistem zapolni vrzel s predpomnilnikom diska, da pospeši dostop do počasnejših datotek in pomnilniških naprav.
Ker je RAM omejen, Linux uporablja virtualni pomnilnik in mehanizme zamenjave za logično razširite razpoložljivi prostorkar procesom omogoča, da vidijo velik, neprekinjen naslovni prostor, čeprav se strani ponovno uporabljajo in premikajo med RAM-om in sekundarnim pomnilnikom pod njim.
Navidezni pomnilnik, fizični pomnilnik, swap in disk
V Linuxu se izraz "virtualni pomnilnik" pogosto uporablja za označevanje pomnilniškega prostora, ki je viden vsakemu procesu. Vsak program vidi zasebni, izoliran in zaščiten naslovni prostorTo je posledica kombinacije procesorjevega MMU-ja in tabel strani jedra. Ta prostor je veliko večji od razpoložljivega RAM-a in je odvisen tako od fizičnega pomnilnika kot od izmenjalnih in preslikanih datotek.
Fizični pomnilnik (RAM) je mesto, kjer se dejansko nahajajo strani, ki se aktivno uporabljajo. Ključnega pomena je imeti dovolj RAM-a za običajne delovne obremenitveNa primer, strežnik z bazami podatkov, kot je MongoDB, potrebuje fizični pomnilnik, ki presega potrebe mehanizma baze podatkov in drugih storitev, saj če je MongoDB prisiljen intenzivno uporabljati swap, se zmogljivost močno zmanjša: dostop do RAM-a se meri v nanosekundah, medtem ko swap diska deluje v milisekundah.
Izmenjalni pomnilnik deluje kot počasnejša razširitev RAM-aKo se fizični pomnilnik prenasiči, lahko Linux premakne redko uporabljene strani v prostor za izmenjavo, ki je lahko namenska particija ali datoteka znotraj datotečnega sistema. Oba pristopa sta veljavna; izbira je odvisna od pravilnika upravljanja, enostavnosti upravljanja in zahtev glede mirovanja.
Pomembno je razjasniti pomen izmenjevalnega prostora: ni krivec. Sam po sebi ni sinonim za počasen sistem, niti ni vir, ki bi ga smeli uporabljati le, ko se vse ostalo sesuje. Pravilno konfiguriran izmenjevalni prostor omogoča prosti RAM iz neaktivnih anonimnih strani (na primer deli procesnega pomnilnika, ki se že dolgo niso uporabljali), s čimer se sprosti prostor za nove delovne obremenitve, ki potrebujejo hitrost.
Poleg RAM-a in swap-ja pridejo v poštev tudi pomnilniške naprave. Diskovni pomnilnik shranjuje trajne podatke, ki preživijo ponovne zagone in izpade električne energijeKo je računalnik vklopljen, se večina teh podatkov shrani v RAM (predpomnilnik strani), jedro pa se na podlagi nedavne hevristike uporabe odloči, katere strani bo obdržalo in katere bo odstranilo, s ciljem zmanjšanja dragih dostopov do diska.
Kako teče poraba pomnilnika v Linuxu
Tipičen tok podatkov v sistemu Linux poteka skozi več komponent: uporabnik ali aplikacije generirajo zahteve, ki jih sistem prevede v dostop do pomnilnika in diskaPodatki, prebrani iz pomnilnika, se najprej naložijo v RAM, kjer lahko ostanejo v predpomnilniku strani. Ob ponovni zahtevi jedro preveri, ali so že shranjeni v predpomnilniku, s čimer se izogne novemu dostopu do diska.
V ta proces sta vključena tudi CPU in MMU. CPU deluje na virtualnih naslovih, strojna oprema pa z uporabo tabel strani vsak dostop prevede na fizični naslov v RAM-u ali pa ga razreši z mehanizmi napake strani, če naslov ni naložen. Če je treba podatke ohraniti, se zapišejo na disk, vendar se med delom z njimi daje prednost njihovemu ohranjanju v tabeli virtualnih naslovov. Hiter pomnilnik za izboljšano delovanje.
Ko RAM-a začne zmanjkovati, jedro uporabi svoje algoritme za regeneracijo pomnilnika: sprosti manj uporabljen predpomnilnik strani, stisne pomnilniška območja, se zateče k zamenjavi strani z nižjo prioriteto in, če situacija postane kritična, lahko sprejme bolj drastične ukrepe, kot je aktiviranje programa OOM-killer.
Pomnilniški zemljevid procesa v Linuxu
Vsak proces, ki se izvaja v Linuxu, ima zemljevid pomnilnika ali postavitev pomnilnika ki določa, kako je organiziran njegov naslovni prostor: kje se nahajajo izvedljiva koda, globalne spremenljivke, kopica, sklad, argumenti ukazne vrstice, spremenljivke okolja in preslikave skupnih datotek ali knjižnic.
Ta zemljevid je običajno razdeljen na več ločenih segmentov. Na dnu virtualnega prostora najdemo segment besedila (binarna koda programa), nato inicializirani in neinicializirani segmenti podatkov (BSS), nad tem kopica, kjer so shranjene dinamične alokacije, in na vrhu sklad procesov. Argumenti in okolje se prav tako nahajajo v zgornjem delu naslovnega prostora.
Besedilni del vsebuje izvedljiva navodila programa in deljene knjižniceObičajno je samo za branje in si ga lahko deli več procesov, ki izvajajo isto binarno datoteko, s čimer prihranijo fizični pomnilnik. Vsak poskus pisanja v to regijo povzroči napako segmentacije.
Inicializirani podatkovni segment shranjuje globalne in statične spremenljivke, ki imajo na začetku neničelno vrednost. Ta segment lahko konceptualno razdelimo na del samo za branje in del za branje in pisanje, odvisno od tipa podatkov. Segment BSS pa združuje globalne ali statične spremenljivke, ki v kodi nimajo eksplicitne vrednosti ali so inicializirane na nič.
Kopica je območje, ki se uporablja za dinamični pomnilnik, ki ga upravljajo klici, kot so malloc, calloc ali reallocKo program zahteva pomnilnik, ga upravljalnik uporabniškega pomnilnika vzame iz kopice; ko ga sprosti z ukazom `free`, se vrne v kopico, ne pa nujno v operacijski sistem, kar lahko povzroči notranjo fragmentacijo. Sklad je rezerviran za lokalne funkcijske spremenljivke, povratne naslove in parametre ter se z vsakim klicem funkcije in vrnitvijo povečuje ali zmanjšuje.
Če želimo pregledati pomnilniški zemljevid tekočega procesa, uporabimo orodja, kot so pmap Zelo so uporabni. Z pmap <PID> Vidimo lahko različna preslikana območja, njihovo velikost, dovoljenja, ali so anonimna ali povezana z datotekami, kot tudi velikost rezidentnega pomnilnika (RSS) v RAM-u in druge metrike, ki pomagajo razumeti dejansko porabo pomnilnika aplikacije.
Ključni koncepti: strani, napake strani in predpomnilnik
Najmanjša enota za upravljanje pomnilnika v Linuxu je stran spominaObičajno 4 KiB, čeprav obstajajo ogromne strani za določene delovne obremenitve. Vse odločitve jedra o tem, kaj premakniti, sprostiti ali predpomniti, se sprejemajo na ravni strani, ne na ravni posameznega bajta.
Tabele strani so hierarhične strukture, ki jih vzdržuje jedro in kažejo, kako se virtualni naslovi prevajajo v fizične naslove. Vsak vnos lahko vključuje informacije o dovoljenja za branje, pisanje in izvajanje, stanje strani (prisotna v pomnilniku, v swapu, umazana, deljena itd.) in drugi metapodatki, ki jih MMU uporablja med prevajanjem.
Do napake strani pride, ko proces dostopa do veljavnega virtualnega naslova, vendar ustrezna stran ni pripravljena za uporabo: morda še ni bila dodeljena, morda je na disku ali pa zahteva začetno preslikavo. Jedro posreduje, da poiščite ali ustvarite to stranČe se stran nahaja v RAM-u, vendar ni bila pravilno označena, so stroški napake nizki; če jo je treba prenesti z diska (izmenjalni pomnilnik ali datoteka), so stroški veliko višji.
Predpomnilnik strani ali predpomnilnik strani datotek je ena od velikih skrivnosti dobrega delovanja Linuxa. Jedro ga shrani v RAM. podatki in metapodatki datotek Za pospešitev branja in pisanja, s čimer se drastično zmanjša število dostopov do diska. Zato je, čeprav se morda zdi, da je prostega pomnilnika malo, dejansko na voljo velik del tega RAM-a: jedro lahko hitro sprosti predpomnilnik, če aplikacije potrebujejo več prostora.
Znotraj virtualnega prostora ločimo tudi datotečni pomnilnik, povezan s preslikanimi datotekami (na primer koda binarnih datotek in knjižnic ali datoteke, ki so eksplicitno preslikane z mmap) in anonimni pomnilnik, ki ustreza kopici, skladu in drugim preslikavam brez varnostnih kopij datotek. Slednje je mogoče zamenjati le, če je potrebno, ker ni datoteke, iz katere bi ga bilo mogoče regenerirati.
Pritisk na spomin, pretepanje in OOM
Ko število prostih strani pade pod določene pragove, se reče, da sistem vstopi v stanje pritisk spominaV tem primeru mora jedro porabiti več časa za iskanje strani, ki jih je mogoče sprostiti, stisniti ali premakniti v swap, kar vpliva na splošno zmogljivost.
Na spletnih strežnikih se lahko visoka obremenitev pomnilnika odrazi v povečana latencaDelavci morajo počakati, da se strani sprostijo, preden nadaljujejo z obdelavo zahtev, CPU pa porabi cikle za naloge upravljanja pomnilnika namesto za obdelavo koristnih obremenitev. Na namiznih računalnikih se to zazna kot zatikanje, počasen odziv miške, neodzivna okna in celo kratkotrajno zamrzovanje.
Pri oddaljenem dostopu prek SSH, RDP ali VNC se ta situacija kaže kot "zastoji" ukazov, zamude pri tipkanju in na splošno bolj okorna interakcija. Če se swap uporablja tudi pogosto, lahko to povzroči ... stanje pretepanjakjer sistem porabi več časa za premikanje strani med RAM-om in pomnilnikom kot za izvajanje uporabne kode.
Do prekinitve delovanja pride, ko RAM ni zadosten za vzdrževanje aktivnega delovnega nabora procesov. Ko je swap omogočen, anonimne strani nenehno potujejo med RAM-om in swap prostorom, kar sproži V/I na disku. Brez swap-a jedro nima kam shraniti teh anonimnih strani in edina rešitev je prekinitev procesov z uporabo OOM-killerja.
Tudi brez swap-a lahko pride do preobremenitve pomnilnika datotek: strani, ki pripadajo predpomnilniku datotek, se izvržejo in nenehno ponovno nalagajo z diska s hitrostjo, ki jo aplikacije potrebujejo, kar ustvari zanko vhodno/izhodne dejavnosti in izjemno počasnost.
Ko jedro izčrpa vse možnosti za pridobivanje pomnilnika – sproščanje predpomnilnika, premikanje strani v swap, stiskanje in uporabo pravilnikov cgroups – preide v stanje Zmanjka pomnilnika (OOM)Na tej točki mora OOM-killer izbrati enega ali več procesov, ki jih bo zaključil, da bi si povrnil pomnilnik in rešil preostali del sistema.
Da bi izbralo, kateri proces bo ubilo, jedro izračuna rezultat_oom za vsak PID, na podlagi dejavnikov, kot so količina uporabljenega pomnilnika, pomembnost procesa in drugi notranji parametri. To vedenje je mogoče spremeniti z oom_score_adjki prilagaja težo določenega procesa. Orodja, kot so choom Omogočajo vam enostaven ogled in spreminjanje teh vrednosti.
Zamenjava: miti, najboljše prakse in sodobne različice
Swap ima nekoliko nepošten sloves. Mnogi uporabniki menijo, da se mu je treba za vsako ceno izogniti ali da je smiseln le, če je RAM zelo omejen. Vendar pa je v Linuxu swap del ... globalna strategija virtualnega pomnilnika: jedru omogoča, da premakne neaktivne anonimne strani iz RAM-a, da da prednost aktivnim podatkom in predpomnilniku strani.
Napačno je razmišljati o swapu kot o "zadnji možnosti", ki jo uporabimo le, če gre vse drugo narobe. Pravzaprav tudi v sistemih z veliko RAM-a swap daje jedru več prostora za ohranjanje agilnosti glavnega delovnega sklopa in boljšo uporabo fizičnega pomnilnika. Vendar pa je res, da ko je aktivnost swapa zelo visoka in vztrajna, zmogljivost opazno trpi.
V praksi staro pravilo, da mora biti prostor za izmenjavo 1 do 2-krat večji od RAM-a, ni več nespremenljivo. Na strežnikih z velikimi količinami pomnilnika je pogosteje dodeliti veliko manjši prostor za izmenjavo sorazmerno ali celo uporabiti stisnjena swap v RAM-u s tehnologijami, kot sta zram ali zswap, za izboljšanje zmogljivosti in zmanjšanje števila zapisov na disk.
Dodaten primer uporabe swap-a je mirovanje: sistem lahko izpiše vsebino RAM-a v swap prostor in se popolnoma izklopi, nato pa ob zagonu obnovi prvotno stanje. To zahteva, da je razpoložljivi swap prostor vsaj toliko velik kot količina pomnilnika, ki ga je treba shraniti, in to je dejavnik, ki vpliva na izbiro med rešitvami, kot je zram (ki ne dovoljuje mirovanja), in tradicionalnim swapom diska.
V zadnjih letih so poročali tudi o vprašljivem delovanju orodja OOM-killer v nekaterih jedrih, kjer se sistem sesuje, preden orodje OOM-killer začne delovati. V nekaterih primerih omogočanje bližnjic, kot so Alt+SysRq+F (po omogočitvi parametra) /proc/sys/kernel/sysrqTo vam omogoča, da prisilite uničevalca OOM, da obnovi sistem, ki se zdi zamrznjen. Poleg tega so se pojavili demoni, kot so EarlyOOM, nohang in systemd-oomd, prav zato, da se odzovejo, preden jedro doseže ekstremne situacije.
Orodja za spremljanje in upravljanje pomnilnika
Da bi se izognili težavam s pomnilnikom, je bistveno uporabljati prava orodja. Ukazi, kot so free, top, htop, vmstat, ps o sar ponuditi a zelo podroben rentgenski posnetek stanja sistema, tako v realnem času kot skozi čas.
Ukaz free Hitro prikaže skupno količino pomnilnika, uporabljenega pomnilnika, prostega pomnilnika, predpomnilnika in medpomnilnikov ter informacije o swap-jih. To je zelo uporabno za preverjanje, ali dejansko primanjkuje fizičnega pomnilnika ali pa je večina le predpomnjena in jo je mogoče brez težav ponovno uporabiti.
Klasična top in njegova izboljšana različica htop Omogočajo vam, da v realnem času vidite porabo procesorja in pomnilnika na proces, pa tudi obremenitev sistema, čas delovanja, porabo swap-a in druge kazalnike. htop ponuja bolj uporabniku prijazen vmesnik., z barvnimi vrsticami in bližnjicami na tipkovnici za hitro razvrščanje, filtriranje ali ustavljanje procesov.
Ukaz vmstat Ponuja bolj tehnični pogled: statistiko pomnilnika, procese, ostranjevanje, prekinitve in razporejanje CPU-ja. Idealen je za zaznavanje prekomernih napak strani, visoke aktivnosti izmenjave ali vzorca prekinitev. Medtem, ps Omogoča vam podroben seznam procesov, vključno s stolpci za rezidenčni pomnilnik (RSS), navidezni pomnilnik (VSZ) in druge parametre, ki pomagajo najti aplikacije, ki so se "sprožile".
V okoljih Debian ali AlmaLinux so paketi, kot so sysstat Ponujajo dodatne ukaze, kot so sar, kar lahko beleženje porabe pomnilnika skozi časTo omogoča povezavo med najvišjimi porabami in načrtovanimi nalogami, uvajanji ali določenimi dogodki ter ustrezno prilagajanje konfiguracije sistema.
Za pregled pomnilniške mape določenega procesa, poleg tega pa še pmapVedno je dobro raziskati psevdo-datotečni sistem /prockjer ima vsak proces svoj imenik s podrobnimi informacijami, vključno z zemljevidom pomnilnika v /proc/<PID>/maps in statistika v /proc/<PID>/smaps.
Osnovna optimizacija: swap, predpomnilnik in swappiness
Poleg teorije obstaja še nekaj preprostih praktičnih ukrepov, ki jih je treba natančna nastavitev upravljanja pomnilnika v Linuxu brez pretiravanja. Ena prvih stvari, ki jih morate storiti, je preveriti stanje zamenjave z swapon --show In po potrebi ustvarite izmenjalno datoteko, namesto da se zanašate izključno na particijo. To omogoča prilagodljivost pri prilagajanju velikosti brez potrebe po ponovni razdelitvi diskov.
Parameter vm.swappiness To nadzoruje, kako agresivno jedro uporablja swap v primerjavi s sproščanjem predpomnilnika. Visoka vrednost sili, da se swap uporablja pogosteje; nizka vrednost rezervira swap za bolj ekstremne primere, pri čemer daje prednost shranjevanju podatkov v RAM-u. Nastavitve, kot so zamenljivost=10 Običajno dobro delujejo v številnih namiznih in lahkih strežniških okoljih ter jih je mogoče začasno uporabiti z optimizacija jedra s sysctl ali vztrajno v /etc/sysctl.conf.
V zelo specifičnih situacijah, ko želimo ročno počistiti predpomnilnik – na primer po intenzivnem branju, ki se je že končalo – se lahko zatečemo k nastavitvi vm.drop_cachesZdruževanje sync In če temu parametru zapišemo ustrezno vrednost (1, 2 ali 3), jedro zavrže določene predpomnilnike. Vendar je najbolje, da ga uporabljate preudarno, ker Predpomnilnik ni "izgubljen pomnilnik"ampak pomembna optimizacija.
V distribucijah, kot sta Debian in AlmaLinux, je običajno, da se te nastavitve dopolnijo z dobrim spremljanjem procesov, ki porabljajo veliko virov, z uporabo htop o psPrepoznavanje storitev ali aplikacij, ki "porabljajo" pomnilnik, in po potrebi njihovo preoblikovanje ali omejevanje njihove porabe.
Ustvarjanje in prilagajanje območja za izmenjavo je relativno preprosto: preprosto rezervirajte datoteko z fallocatedodelite mu pravilna dovoljenja, inicializirajte ga kot swap z mkswap in ga aktivirajte z swaponDa bi bila sprememba trajna, se doda ustrezen vnos v /etc/fstab kar pomeni, da bo ta datoteka uporabljena kot swap ob vsakem zagonu.
Napredne tehnike: zram, zswap, cgroupv2 in OOM v uporabniškem prostoru
Ko želimo pri optimizaciji iti še korak dlje, pridejo v poštev napredni mehanizmi, kot so npr. zram, zswap y imenski prostori in kontrolne skupinePoleg demonov, kot so EarlyOOM, nohang ali systemd-oomd, ki so zasnovani tako, da kar najbolje izkoristijo pomnilnik in izboljšajo odziv sistema pod pritiskom.
zram uporablja modul jedra za ustvarjanje stisnjenih blokovnih naprav v samem RAM-u. Na te naprave je mogoče namestiti izmenjalni prostor, tako da se strani stisnejo pred shranjevanjem. To v praksi pomeni, kar najbolje izkoristite razpoložljivi pomnilnik za ceno nekaj procesorske moči za stiskanje in odpravlja potrebo po pisanju na disk, čeprav žrtvuje možnost mirovanja.
zswap pa deluje kot stisnjen predpomnilnik v dejanskem izmenjalnem prostoru na disku. Strani, ki jih je treba zamenjati, so sprva shranjene stisnjene v RAM-u in šele ko je ta predpomnilnik poln ali se odločimo, da jih izbrišemo, se zapišejo v tradicionalni izmenjalni prostor. To zmanjša V/I operacijo diska, podaljša življenjsko dobo SSD-jev in Izboljša delovanje v zmernih situacijah uporabe swap-a.
Na področju nadzora virov cgroupv2 ponuja zmogljiv mehanizem za organiziranje procesov v hierarhije in dodeljevanje pomnilnika, procesorja in drugih virov njim. To se doseže s parametri, kot so memory.low ali datoteke, kot so memory.pressureJedru lahko poveste, katere skupine imajo prednost, in spremljate čas, ki ga naloge preživijo blokirane zaradi pomanjkanja pomnilnika, s čimer razlikujete, ali težava vpliva na nekatere naloge ali na celotno skupino.
V scenarijih, kjer se je treba za vsako ceno izogniti zamrznitvi sistema, se je pojavilo več demonov uporabniškega prostora, ki proaktivneje upravljajo situacije OOM. EarlyOOM periodično spremlja RAM in swap ter ko zazna, da oba padeta pod določene pragove (Privzeto manj kot 10 % brezplačnega začeti delovati), pošilja signale procesom z večjim oom_score da sprostite pomnilnik, preden jedro zaide v paniko.
nohang ponuja podoben, a bolj prilagodljiv pristop, ki podpira zram, analizira pritisk na pomnilnik in uporabnikom omogoča, da določijo dejanja po meri, ko je zaznano tveganje sesutja. Čeprav je projekt v primerjavi z drugimi izgubil nekaj aktivnosti, ostaja privlačna možnost za napredne uporabnike, ki želijo natančen nadzor nad tem, kateri procesi so žrtvovani in kdaj.
Končno, systemd-oomd, ki ga je prvotno razvil Facebook in je zdaj integriran v številne distribucije s sodobnim systemd, ponuja rešitev, zasnovano tako za obsežne uvedbe kot za namizna okolja. Spremlja omejitve kontrolnih skupin, pritisk na pomnilnik in druge kazalnike ter se odloča, katere enote ali storitve ustaviti, da se obnovi uporabnost sistema, in deluje kot bolj dovršeno dopolnilo klasičnemu jedrnemu OOM-killerju.
Dobre prakse za preprečevanje težav s spominom
V vsakodnevni praksi je poleg prilagajanja določenih parametrov priporočljivo upoštevati vrsto dobre prakse za zmanjšanje strahu povezano s pomnilnikom v Linuxu. Prva je pravilna velikost RAM-a in swap-a glede na dejansko obremenitev: baze podatkov, aplikacijski strežniki, težka namizja ali več naloženih vsebnikov zahtevajo več pomnilnika kot preproste storitve.
Na strežnikih je priporočljivo redno preverjati, katere storitve so aktivne in onemogočite ali ustavite tiste, ki niso v uporabiV okoljih z Dockerjem ali drugimi vsebniki je po zaključku testov ali začasnih uvedb priporočljivo očistiti vsebnike, slike in nosilce, ki niso več potrebni, da preprečite, da bi preostali procesi tiho porabljali pomnilnik.
RAM diski so lahko uporabno orodje za pospešitev določenih vrst začasnih opravil: v RAM-u je definiran datotečni sistem, ki se uporablja za predpomnjenje podatkov aplikacij ali delovnih območij z veliko prometa. Ker so nestanovitni, je pomembno razumeti, da se njihova vsebina ob zaustavitvi ali ponovnem zagonu izgubi, vendar jo je mogoče v zameno ... več desetkrat hitrejši od SSD-ja, nekaj zelo zanimivega za intenzivno branje in začasne pisne naloge.
Z varnostnega vidika je pomembno spremljati odprta vrata in izpostaviti le tista, ki so nujno potrebna. Napadi zlonamerne programske opreme, kot so rudarji kriptovalut, pogosto puščajo sledi v obliki procesov, ki porabljajo ogromne količine procesorja in pomnilnika ter lahko nameščajo naloge na crontab Vztrajati. Pregledovanje in čiščenje sumljivih opravil cron ter zapiranje nebistvenih vrat pomaga preprečiti, da bi neželeni procesi porabljali pomnilnik.
Nenazadnje ne smemo pozabiti na vpliv datotečnega sistema na splošno zmogljivost. Sodobne možnosti, kot so XFS ali Btrfs V določenih scenarijih lahko ponudijo prednosti pred ext4, zlasti pri velikih obremenitvah ali pri izkoriščanju naprednih funkcij. Vsak primer zahteva testiranje, vendar izbira datotečnega sistema vpliva tudi na upravljanje metapodatkov in dostopa do diska, kar posredno vpliva na zaznano delovanje sistema.
Obvladovanje upravljanja pomnilnika v Linuxu vključuje razumevanje, kako se dodeljujejo RAM, swap in pomnilnik, vloge konceptov, kot so strani, predpomnilnik strani, pritisk na pomnilnik in prednastavitev (OOM), ter kako uporabljati napredna orodja in mehanizme, kot so zram, zswap, cgroupv2 in systemd-oomd. S tem znanjem je veliko lažje natančno nastaviti kateri koli stroj – od skromnega prenosnika do produkcijskega strežnika, naloženega s storitvami – tako da pomnilnik preneha biti vir težav in postane zaveznik pri doseganju optimalne zmogljivosti. agilen, stabilen sistem, pripravljen na prenašanje koničnih obremenitev brez drame.
Vsebina
- Osnove pomnilnika v Linuxu
- Navidezni pomnilnik, fizični pomnilnik, swap in disk
- Kako teče poraba pomnilnika v Linuxu
- Pomnilniški zemljevid procesa v Linuxu
- Ključni koncepti: strani, napake strani in predpomnilnik
- Pritisk na spomin, pretepanje in OOM
- Zamenjava: miti, najboljše prakse in sodobne različice
- Orodja za spremljanje in upravljanje pomnilnika
- Osnovna optimizacija: swap, predpomnilnik in swappiness
- Napredne tehnike: zram, zswap, cgroupv2 in OOM v uporabniškem prostoru
- Dobre prakse za preprečevanje težav s spominom