Mis on vm.min_free_kbytes ja kuidas seda häälestada?

What Is Vm Min_free_kbytes

Mis on vm.min_free_kbytes sysctl Linuxi kerneli jaoks häälestatav ja millisele väärtusele see seada? Selles artiklis uurime seda parameetrit ja selle mõju töötavale Linuxi süsteemile. Testime selle mõju OS -i lehe vahemälule ja pahatahtlikele failidele ning seda, mida näitab süsteemi vaba käsk selle parameetri määramisel. Teeme mõningaid haritud oletusi selle häälestatava ideaalväärtuste kohta ja näitame, kuidas seadistada vm.min_free_kbytes püsivalt taaskäivitamise jaoks. Nii et lähme.

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 raskendada, kui vajate tavaliste toimingute jaoks mälu, et OS toimiks sujuvalt. Seetõttu pakub kernel häälestatavat vm.min_free_kbaiti. Häälestatav sunnib kerneli mäluhaldurit hoidma vähemalt X vaba mälu. Siin on ametlik määratlus linuxi kerneli dokumentatsioon : Seda kasutatakse selleks, et sundida Linuxi virtuaalmasinat hoidma minimaalset arvu kilobaite vaba. VM kasutab seda numbrit, et arvutada vesimärgi [WMARK_MIN] väärtus iga süsteemi madala taseme tsooni jaoks. Iga lowmem -tsoon saab hulga reserveeritud tasuta lehti, mis sõltuvad selle suurusest. PF_MEMALLOC eraldiste rahuldamiseks on vaja minimaalset mälu; kui seate selle väärtuseks alla 1024 KB, muutub teie süsteem peenelt katki ja suure koormuse korral ummikseisu. Kui seadistate selle liiga kõrgeks, käivitub teie masin kohe.



Valideerimine vm.min_free_kbytes Works

Et testida, kas seadistus min_free_kbyte töötab kavandatud viisil, olen loonud Linuxi virtuaalse eksemplari, millel on ainult 3,75 GB muutmälu. Süsteemi analüüsimiseks kasutage allolevat tasuta käsku:



#tasuta -m



Vaadates ülaltoodud vaba mälu utiliiti, kasutades lippu -m väärtuste printimiseks MB -s. Mälu on kokku 3,5 kuni 3,75 GB. Mälu kasutatakse 121 MB, mälu on vaba 3,3 GB, puhverpuhver kasutab 251 MB. Ja saadaval on 3,3 GB mälu.

Nüüd muudame vm.min_free_kbytes väärtust ja vaatame, milline on selle mõju süsteemi mälule. Kerneli parameetri väärtuse muutmiseks kordame uut väärtust proc virtuaalses failisüsteemis, nagu allpool kirjeldatud:

# echo 1500000>/proc/sys/vm/min_free_kbytes
# sysctl vm.min_free_kbaiti



Näete, et parameeter muudeti ligikaudu 1,5 GB -le ja see on jõustunud. Kasutame nüüd tasuta käsku uuesti, et näha süsteemi tuvastatud muudatusi.

#tasuta -m

Vaba mälu ja puhverpuhver ei muutu käsuga, kuid mälumaht kuvatakse kujul saadaval on vähendatud 3327 -lt 1222 MB -le. See on parameetri muutuse ligikaudne vähendamine 1,5 GB min vabale mälule.

Nüüd loome 2 GB andmefaili ja vaatame, mida selle faili lugemine puhvermälu vahemällu teeb. Siit saate teada, kuidas luua 2 GB andmefail 2 rida bash -skripti allpool. Skript genereerib käsu dd abil 35 MB juhusliku faili ja kopeerib selle seejärel 70 korda uude data_file väljund:

# dd if =/dev/random of =/root/d1.txt count = 1000000
# i jaoks 'järj 1 70'; tee kaja $ i; kass /juur/d1.txt >> /root /data_file; tehtud

Loeme faili ja ignoreerime selle sisu, lugedes ja suunates faili järgmiselt: /dev /null.

#kassdata_file> /arendaja/null

Ok, mis meie süsteemimäluga selle manöövrite komplektiga juhtus, kontrollime seda nüüd:

#tasuta -m

Analüüsides ülaltoodud tulemusi. Meil on veel 1,8 GB vaba mälu, nii et kernel on kaitsnud suure hulga mälu reserveerituna meie seadistuse min_free_kbyte tõttu. Puhvri vahemälu on kasutanud 1691 MB, mis on väiksem kui meie andmefaili kogumaht, mis on 2,3 GB. Ilmselt kogu data_file ei saanud vahemällu salvestada, kuna puhvri vahemällu ei olnud vaba mälu. Võime kinnitada, et kogu faili ei salvestata vahemällu, vaid ajastame korduvaid faili lugemise katseid. Kui see salvestati vahemällu, kulub faili lugemiseks murdosa sekundist. Proovime seda.

# time cat data_file> /dev /null
# time cat data_file> /dev /null

Faili lugemine võttis aega peaaegu 20 sekundit, mis tähendab, et peaaegu kõik pole vahemällu salvestatud.

Viimase valideerimisena vähendame vm.min_free_kbyte, et lehe vahemälu saaks rohkem ruumi tegutsemiseks ja võime eeldada, et vahemälu töötab ja faili lugemine muutub palju kiiremaks.

# echo 67584>/proc/sys/vm/min_free_kbytes
# time cat data_file> /dev /null
# time cat data_file> /dev /null

Kui vahemällu salvestamiseks on saadaval lisamälu, langes lugemisaeg 20 sekundilt enne 0,364 sekundit, kui see kõik oli vahemälus.

Olen uudishimulik teha veel üks katse. Mis juhtub malloc -kõnedega, et eraldada mälu C -programmist selle tõeliselt kõrge vm.min_free_kbyte sätte ees. Kas see ebaõnnestub? Kas süsteem sureb? Katsete jätkamiseks lähtestage esmalt seade vm.min_free_kbytes tõeliselt kõrgele väärtusele.

#viskas välja 1500000 > /protsenti/sys/vm/min_ tasuta_baiti

Vaatame uuesti meie vaba mälu:

Teoreetiliselt on meil vaba 1,9 GB ja saadaval 515 MB. Kasutame stressitesti programmi nimega stress-ng, et kasutada mõnda mälu ja näha, kus me ebaõnnestub. Kasutame vm -testrit ja proovime eraldada 1 GB mälu. Kuna meil on 3,75 GB süsteemis reserveeritud ainult 1,5 GB, peaks see vist töötama.

# stress-ng --vm 1 --vm-baiti 1G-timeout 60s
stress: info:[17537]sigade saatmine:1vm
stress: info:[17537]vahemälu eraldamine: vahemälu vaikimisi suurus: 46080K
stress: info:[17537]edukas jooks lõpetatudsisse60.09(1min,0,09kuiv)
# stress-ng --vm 2 --vm-baiti 1G-timeout 60s
# stress-ng --vm 3 --vm-baiti 1G-timeout 60s

Proovime seda uuesti rohkemate töötajatega, saame proovida 1, 2, 3, 4 töötajat ja ühel hetkel peaks see ebaõnnestuma. Minu test läbis selle 1 ja 2 töötajaga, kuid ebaõnnestus 3 töötajaga.

Lähtestame vm.min_free_kbyte väikese arvu ja vaatame, kas see aitab meil käivitada 3 mälustressorit, igaüks 1 GB 3,75 GB süsteemis.

# echo 67584>/proc/sys/vm/min_free_kbytes
# stress-ng --vm 3 --vm-baiti 1G-timeout 60s

Seekord töötas see edukalt ilma veata, proovisin seda kaks korda ilma probleemideta. Seega võin järeldada, et malloci jaoks on rohkem vaba mälu, kui vm.min_free_kbytes väärtus on seatud madalamale.

Vm.min_free_kbyte vaikeseade

Minu süsteemi sätte vaikeväärtus on 67584, mis on umbes 1,8% süsteemi RAM -ist või 64 MB. Tugevalt räsitud süsteemi ohutuse huvides kaldun seda veidi suurendama ehk 128 MB -ni, et võimaldada rohkem vaba mälu, kuid keskmise kasutamise korral tundub vaikimisi väärtus piisavalt mõistlik. Ametlik dokumentatsioon hoiatab väärtuse liiga kõrgeks tegemise eest. Selle seadistamine 5 või 10% -le süsteemi RAM -ist ei ole tõenäoliselt selle sätte ettenähtud kasutus ja see on liiga kõrge.

Vm.min_free_kbyte seadistamine taaskäivitamiseks

Tagamaks, et seade säilib taaskäivitamisel ja seda ei taastata taaskäivitamisel vaikeväärtustele, muutke kindlasti sysctl säte püsivaks, lisades faili /etc/sysctl.conf soovitud uue väärtuse.

Järeldus

Oleme näinud, et häälestatavat Linuxi tuuma vm.min_free_kbytes saab muuta ja see võib süsteemis mälu reserveerida, et tagada süsteemi stabiilsus, eriti intensiivse kasutamise ja suure mälu eraldamise korral. Vaikesätted võivad olla pisut liiga madalad, eriti suure mäluga süsteemides ja neid tuleks hoolikalt suurendada. Oleme näinud, et selle häälestatava mälu takistab OS -i vahemälu kogu mälu kasutamast ja takistab ka mõningatel halva toimingutega kogu mälu kasutamist.