Teljesítmény

Mi a vm.min_free_kbyte és hogyan lehet hangolni?

Mi a vm.min_free_kbyte és hogyan lehet hangolni?
Mi a vm.min_free_kbytes sysctl hangolható a linux kernel számára, és milyen értékre kell beállítani?  Ebben a cikkben tanulmányozzuk ezt a paramétert és annak hatását egy futó linuxos rendszerre.  Megvizsgáljuk az OS oldal gyorsítótárára és a mallocs-ra gyakorolt ​​hatását, valamint azt, hogy mit mutat a rendszer ingyenes parancs, amikor ezt a paramétert beállítják.  Néhány kitalált találgatást fogunk tenni a hangolható ideális értékeire vonatkozóan, és megmutatjuk, hogyan állítsuk be a vm értéket.min_free_kbytes véglegesen, hogy túlélje az újraindítást.  Akkor gyerünk.

Hogy vm.A min_free_kbytes működik

Memóriakiosztásra lehet szüksége a rendszernek a rendszer megfelelő működésének biztosítása érdekében.  Ha a kern lehetővé teszi az összes memória kiosztását, akkor nehézségekbe ütközhet, ha a rendszeres műveletekhez memóriára van szüksége az operációs rendszer zavartalan működése érdekében.  Ezért a kern biztosítja a hangolható vm-t.min_ szabad_kbyte.  A hangolás arra kényszeríti a kernel memóriakezelőjét, hogy legalább X mennyiségű szabad memóriát tartson meg.   Itt van a hivatalos meghatározás a linux kernel dokumentáció: „Ezzel arra kényszerítik a Linux virtuális gépét, hogy minimális számú kilobájt szabadon maradjon.  A virtuális gép ezt a számot használja a vízjel [WMARK_MIN] érték kiszámításához a rendszer minden alacsony memóriájú zónájához. Minden alacsonyabb szintű zóna számos lefoglalt ingyenes oldalt kap méretétől függően. A PF_MEMALLOC allokációk kielégítéséhez minimális memóriamennyiség szükséges; ha ezt 1024 KB-nál alacsonyabbra állítja, a rendszere finoman megszakad és nagy terhelés esetén holtpontra hajlamos. Ha ezt túl magasra állítja, azonnal OOM lesz a gépe.„

A vm érvényesítése.min_free_kbytes Works

Annak tesztelésére, hogy a min_free_kbytes beállítása megfelelően működik-e, létrehoztam egy linuxos virtuális példányt, csak 3.75 GB RAM.  A rendszer elemzéséhez használja az alábbi ingyenes parancsot:

# szabad -m

Megtekintve a fenti szabad memória segédprogramot az -m jelzővel, hogy az értékeket MB-ban nyomtassák.  A teljes memória 3.5–3.75 GB memória.  121 MB memória kerül felhasználásra, 3.3 GB memória szabad, 251 MB-ot használ a puffer gyorsítótár.  És 3.3 GB memória áll rendelkezésre.

Most meg fogjuk változtatni a vm értékét.min_free_kbytes, és nézze meg, milyen hatással van a rendszer memóriájára.  Visszhangozzuk az új értéket a proc virtuális fájlrendszerre, hogy megváltoztassuk a kernel paraméter értékét az alábbiak szerint:

# echo 1500000> / proc / sys / vm / min_free_kbyte
# sysctl vm.min_ szabad_kbyte

Láthatja, hogy a paraméter 1-re változott.Körülbelül 5 GB, és életbe lépett.  Most használjuk a ingyenes parancsot újra a rendszer által felismert változások megtekintéséhez.

# szabad -m

A szabad memóriát és a puffer gyorsítótárat a parancs nem változtatja meg, de a memória mennyiségét a elérhető 3327-ről 1222 MB-ra csökkent.  Ami hozzávetőlegesen csökkenti a paraméter változását 1-re.5 GB perc szabad memória.

Most hozzunk létre egy 2 GB-os adatfájlt, majd nézzük meg, hogy a puffer gyorsítótárba való beolvasás mit tesz az értékekkel.  Így hozhat létre 2 GB-os adatfájlt az alábbi bash szkript 2 sorában.  A szkript egy 35 MB-os véletlenszerű fájlt generál a dd paranccsal, majd 70-szer másolja át egy újba adatfájl Kimenet:

# dd, ha = / dev / véletlenszerű = / root / d1.txt szám = 1000000
# az i-re '1 70. szekvencia'; do echo $ i; macska / gyökér / d1.txt >> / root / data_file; Kész

Olvassuk el a fájlt, és hagyjuk figyelmen kívül a tartalmat úgy, hogy elolvassuk és átirányítjuk a fájlt a / dev / null fájlba az alábbiak szerint:

# cat data_file> / dev / null

Ok, mi történt a rendszer memóriájával ezzel a manőverkészlettel, ellenőrizzük most:

# szabad -m

A fenti eredmények elemzése.  Még mindig van 1.8 GB szabad memória, így a kernel lefoglalt egy nagy memóriaterületet a min_free_kbytes beállítás miatt.  A puffer gyorsítótár 1691 MB-ot használt fel, ami kisebb, mint az adatfájlunk teljes mérete, amely 2.3 GB.  Nyilván az egész adat_fájl nem sikerült tárolni a gyorsítótárban, mivel nem volt rendelkezésre álló memória a puffer gyorsítótár számára.  Ellenőrizhetjük, hogy a teljes fájlt nem tároljuk-e a gyorsítótárban, de időzítjük a fájl olvasásának ismételt kísérleteit. Ha gyorsítótárban van, akkor a fájl elolvasása másodperc töredékét veszi igénybe.  Próbáljuk ki.

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

Az olvasott fájl csaknem 20 másodpercet vett igénybe, ami azt jelenti, hogy szinte biztos, hogy nem minden tárolt.

Végső validálásként csökkentsük a vm értéket.min_free_kbyte, hogy az oldal gyorsítótárának több helye legyen a működésre, és számíthatunk arra, hogy a gyorsítótár működik és a fájlolvasás sokkal gyorsabb lesz.

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

A fájlok gyorsítótárazásához rendelkezésre álló extra memóriával a fájl olvasási ideje az előző 20 másodpercről az előzőre csökkent .364 másodperc, mindez gyorsítótárban.

Kíváncsi vagyok egy újabb kísérlet elvégzésére.  Mi történik a malloc-hívásokkal, hogy memóriát foglaljon le egy C programból, szemben ezzel az igazán magas vm-mel.min_free_kbytes beállítás.  Megbukik-e a mallocon?  Meg fog halni a rendszer?  Először állítsa vissza a vm-et.A min_free_kbytes nagyon magas értékre állítva folytathatja kísérleteinket:

# echo 1500000> / proc / sys / vm / min_free_kbytes

Nézzük újra szabad memóriánkat:

Elméletileg van 1.9 GB szabad és 515 MB szabad.  Használjunk stressz-ng nevű stresszteszt programot annak érdekében, hogy használjunk némi memóriát és megnézzük, hol bukunk meg.  Használjuk a vm tesztelőt, és megpróbálunk lefoglalni 1 GB memóriát.  Mivel csak 1-et foglaltunk.5 GB a 3-on.75 GB-os rendszer, azt hiszem, ennek működnie kell.

# stress-ng --vm 1 --vm-byte 1G - 60-as időkorlát
stress-ng: info: [17537] disznók diszpécsere: 1 vm
stress-ng: info: [17537] cache kiosztás: alapértelmezett cache méret: 46080K
stress-ng: info: [17537] sikeres futás teljesítve 60-ban.09s (1 perc, 0.09 mp)
# stress-ng --vm 2 --vm-bájt 1G - 60-as időkorlát
# stress-ng --vm 3 --vm-bájt 1G - 60-as időkorlát

Próbáljuk meg újra több dolgozóval, megpróbálhatunk 1, 2, 3, 4 dolgozót, és valamikor meghiúsulhat.  A tesztem során 1 és 2 dolgozóval teljesített, de 3 munkásnál nem sikerült.

Állítsuk vissza a vm-et.min_free_kbyte alacsony számra, és nézze meg, hogy ez segít-e 3 memória stresszor futtatásában, egyenként 1 GB-mal egy 3-ason.75 GB-os rendszer.

# echo 67584> / proc / sys / vm / min_free_kbyte
# stress-ng --vm 3 --vm-bájt 1G - 60-as időkorlát

Ezúttal hiba nélkül sikeresen futott, két alkalommal kipróbáltam problémamentesen.  Tehát arra a következtetésre juthatok, hogy van egy viselkedési különbség abban, hogy több memória áll rendelkezésre a malloc számára, amikor a vm.A min_free_kbytes értéket alacsonyabbra állítjuk.

Alapértelmezett beállítás a vm számára.min_ szabad_kbyte

A rendszerem alapértelmezett értéke 67584, ami körülbelül 1.A rendszer RAM-jának 8% -a vagy 64 MB. Biztonsági okokból egy erősen összeomlott rendszeren hajlamos vagyok kissé növelni azt 128 MB-ig, hogy fenntartottabb szabad memória álljon rendelkezésre, azonban átlagos használat esetén az alapértelmezett érték elég értelmesnek tűnik.  A hivatalos dokumentáció arra figyelmeztet, hogy az érték túl magas legyen.  Ha a rendszer RAM-jának 5 vagy 10% -át állítja be, valószínűleg nem a beállítás rendeltetése, és túl magas.

Beállítás vm.min_free_kbyte az újraindítás túlélése érdekében

Annak biztosítása érdekében, hogy a beállítás túlélje az újraindítást, és az újraindításkor ne állítsa vissza az alapértelmezett értékeket, ügyeljen arra, hogy a sysctl beállítást tartósan állítsa be a kívánt új érték beírásával az / etc / sysctl fájlba.conf fájl.

Következtetés

Láttuk, hogy a vm.min_free_kbytes linux kernel módosítható és lefoglalhatja a memóriát a rendszeren annak biztosítása érdekében, hogy a rendszer stabilabb legyen, különösen nagy igénybevétel és nehéz memóriaallokációk idején.  Az alapértelmezett beállítások kissé túl alacsonyak lehetnek, különösen a nagy memóriájú rendszereken, és gondosan meg kell fontolni őket.  Láttuk, hogy az e hangolás által lefoglalt memória megakadályozza, hogy az operációs rendszer gyorsítótár az egész memóriát felhasználja, és néhány malloc műveletnél megakadályozza az összes memória felhasználását.

Vulkan Linux felhasználók számára
A grafikus kártyák minden új generációjával azt látjuk, hogy a játékfejlesztők átlépik a grafikus hűség határait, és egy lépéssel közelebb kerülnek a ...
OpenTTD vs Simutrans
Saját közlekedési szimuláció létrehozása szórakoztató, pihentető és rendkívül csábító lehet. Ezért meg kell győződnie arról, hogy a lehető legtöbb ját...
OpenTTD bemutató
Az OpenTTD az egyik legnépszerűbb üzleti szimulációs játék. Ebben a játékban létre kell hoznia egy csodálatos szállítási vállalkozást. Azonban kezdete...