Kuidas vm.min_free_kbytes töötab
Süsteem võib vajada mälu eraldamist, et tagada süsteemi enda nõuetekohane toimimine. Kui kernel võimaldab kogu mälu eraldada, võib see OS-i sujuva toimimise nimel vaeva näha, kui vajate regulaarsete toimingute jaoks mälu. Sellepärast pakub tuum häälestatava vm.min_vaba_kabaiti. Häälestatav sunnib tuuma mäluhaldurit säilitama vähemalt X vaba mälumahtu. Siin on ametlik määratlus Linuxi tuuma dokumentatsioon: „Seda kasutatakse selleks, et sundida Linuxi VM-i hoidma vaba minimaalset kilobaiti. VM kasutab seda arvu, et arvutada süsteemi kõigi madalamate tsoonide vesimärgi [WMARK_MIN] väärtus. Iga madalama taseme tsoon saab oma reserveerituna hulga reserveeritud tasuta lehti. PF_MEMALLOC eraldiste rahuldamiseks on vaja minimaalset mälumahtu; kui määrate selle väiksemaks kui 1024 KB, puruneb teie süsteem peenelt ja kaldub suure koormuse korral ummikusse minema. Selle liiga kõrgeks seadmine muudab teie masina koheseks."
Valideerimine vm.min_free_kbytes Töötab
Selleks, et testida, kas min_free_kbyte seade töötab kavandatud viisil, olen loonud Linuxi virtuaalse eksemplari, kus.75 GB RAM-i. Süsteemi analüüsimiseks kasutage allpool olevat tasuta käsku:
# tasuta -m
Vaadates ülaltoodud vaba mälu utiliiti, kasutades väärtust MB-na, kasutades väärtust -m. Kogumälu on 3.5 kuni 3.75 GB mälu. Kasutatakse 121 MB mälu, 3.3 GB mälu on vaba, puhvermälu kasutab 251 MB. Ja 3.Saadaval on 3 GB mälu.
Nüüd muudame vm väärtust.min_vaba_kabaiti ja vaadake, milline mõju on süsteemi mälul. Kordame uue väärtuse proc virtuaalsele failisüsteemile, et muuta kerneli parameetri väärtust allpool toodud viisil:
# kaja 1500000> / proc / sys / vm / min_vaba_kabaiti# sysctl vm.min_vaba_kabaiti
Näete, et parameeter muudeti väärtuseks 1.Umbes 5 GB ja on jõustunud. Nüüd kasutame tasuta käsk uuesti, et näha süsteemi tuvastatud muudatusi.
# tasuta -m
Vaba mälu ja puhvermälu ei muutu käsuga, kuid kuvatav mälumaht on saadaval on vähendatud 3327-lt 1222 MB-ni. Mis on parameetri muutuse ligikaudne vähendamine väärtusele 1.5 GB min vaba mälu.
Nüüd loome 2GB andmefaili ja siis vaatame, mida see fail puhvervällu lugedes väärtustega teeb. Nii saate 2 GB andmefaili luua allpool olevas bashi skripti kahes reas. Skript loob käsuga dd 35MB juhusliku faili ja seejärel kopeerib selle 70 korda uude andmete_fail väljund:
# dd kui = / dev / juhuslik = / root / d1.txt arv = 1000000# i jaoks 'seq 1 70'; tee kaja $ i; kass / juur / d1.txt >> / root / data_file; tehtud
Loeme faili ja ignoreerime sisu, lugedes ja suunates faili alla / dev / null nagu allpool:
# cat data_file> / dev / nullOk, mis on juhtunud meie süsteemimäluga selle manöövrite komplektiga, kontrollime seda kohe:
# tasuta -m
Ülaltoodud tulemusi analüüsides. Meil on veel 1.8 GB vaba mälu, nii et kernel on min_free_kbytes sätte tõttu kaitsnud reserveeritud suurt mälumahtu. Puhvermällu on kasutatud 1691 MB, mis on väiksem kui meie andmefaili suurus 2.3 GB. Ilmselt kogu andmete_fail ei saanud vahemällu salvestada, kuna puhvervälja jaoks pole piisavalt vaba mälu. Saame kinnitada, et kogu faili ei salvestata vahemälus, vaid ajastame faili korduvad katsed. Kui see oli vahemällu salvestatud, kuluks faili lugemiseks murdosa sekundist. Proovime seda.
# time cat data_file> / dev / null# time cat data_file> / dev / null
Faili lugemine võttis peaaegu 20 sekundit, mis tähendab, et see pole peaaegu kindlasti kõik vahemällu salvestatud.
Ühe lõpliku valideerimisena vähendame vm.min_vaba_kabaiti, et lehe vahemälul oleks rohkem ruumi tegutsemiseks ja võime eeldada, et vahemälu töötab ja faili loetakse palju kiiremini.
# echo 67584> / proc / sys / vm / min_vaba_kabaiti# time cat data_file> / dev / null
# time cat data_file> / dev / null
Kui faili vahemällu salvestamiseks on saadaval lisamälu, langes 20 sekundist varasemasse aega lugemise aeg .364 sekundit, kõik on vahemälus.
Mul on uudishimu teha veel üks katse. Mis juhtub malloc-kõnedega, et eraldada mälu C-programmist selle tõeliselt kõrge vm ees.min_vaba_kabaiti seade. Kas see kukub mallocil läbi? Kas süsteem sureb? Kõigepealt lähtestage vm.Min_free_kbytes seadistades meie katsete jätkamiseks tõeliselt kõrge väärtuse:
# kaja 1500000> / proc / sys / vm / min_vaba_kabaitiVaatame uuesti oma vaba mälu:
Teoreetiliselt on meil 1.9 GB vaba ja 515 MB saadaval. Kasutame stressitesti programmi nimega stress-ng, et kasutada veidi mälu ja näha, kus me ebaõnnestume. Kasutame vm testerit ja proovime eraldada 1 GB mälu. Kuna meil on reserveeritud ainult 1.5 GB 3-le.75 GB süsteem peaks see vist töötama.
# stress-ng --vm 1 --vm-baidid 1G - 60-ndate kellaaegstress-ng: info: [17537] sigade saatmine: 1 vm
stress-ng: info: [17537] vahemälu eraldamine: vahemälu vaikimisi suurus: 46080K
stress-ng: info: [17537] edukas jooks valmis 60. aastal.09s (1 min, 0.09 sekundit)
# stress-ng --vm 2 --vm-baiti 1G - 60-ndate kellaaeg
# stress-ng --vm 3 --vm-baiti 1G - 60-ndate aastate väljalülitamine
Proovime uuesti rohkemate töötajatega, saame proovida 1, 2, 3, 4 töötajat ja ühel hetkel peaks see ebaõnnestuma. Minu testis läbis see 1 ja 2 töötajat, kuid ebaõnnestus 3 töötajaga.
Lähtestame vm.min_vaba_kabaiti väikesele arvule ja vaadake, kas see aitab meil käivitada 3 mälu stressorit, 1GB igaüks 3.75 GB süsteem.
# echo 67584> / proc / sys / vm / min_vaba_kabaiti# stress-ng --vm 3 --vm-baidid 1G - 60-ndate kellaaeg
Seekord jooksis see edukalt ilma tõrgeteta, proovisin seda kaks korda probleemideta. Nii võin järeldada, et malloci jaoks on rohkem mälu kättesaadav käitumuslik erinevus, kui vm.min_free_kbytes väärtuseks seatakse madalam väärtus.
Vm vaikeseade.min_vaba_kabaiti
Minu süsteemi sätte vaikeväärtus on 67584, mis on umbes 1.8% RAM-ist süsteemis ehk 64 MB. Turvalisuse huvides tugevasti räsitud süsteemis kipuksin seda pisut suurendama ehk 128 MB-ni, et võimaldada reserveeritumat vaba mälu, kuid keskmise kasutamise korral tundub vaikeväärtus piisavalt mõistlik. Ametlik dokumentatsioon hoiatab väärtuse liiga kõrgeks muutmise eest. Selle määramine 5 või 10% -ni süsteemi RAM-ist ei ole tõenäoliselt sätte kavandatud kasutus ja on liiga kõrge.
Vm seadistamine.min_vaba_kabaiti, et taaskäivitada
Selle tagamiseks, et seade püsiks taaskäivitamisel ja et taaskäivitamisel ei taastata vaikeväärtusi, muutke sysctl säte püsivaks, lisades soovitud uue väärtuse kataloogi / etc / sysctl.konf fail.
Järeldus
Oleme näinud, et vm.min_vaba_kabaiti linuxi tuuma saab häälestada ja see võib süsteemi mälu reserveerida, et tagada süsteemi stabiilsus, eriti intensiivse kasutamise ja suure mälumahu korral. Vaikimisi seaded võivad olla veidi liiga madalad, eriti suure mälumahuga süsteemides, ja neid tuleks kaaluda ettevaatlikult. Oleme näinud, et selle häälestatava reserveeritud mälu takistab OS-i vahemälul kogu mälu kasutamist ja takistab ka mõnel malloc-operatsioonil kogu mälu kasutamist.