Kā ierobežot failu kešatmiņu CentOS (Linux)? Swappiness un kešatmiņas iestatīšana operētājsistēmā Linux Kešatmiņas pārvaldība Linux kodolā 2.4.

Sākums / Neieslēdzas
Operētājsistēmā Linux gandrīz visas komandas ir bez grafiskā interfeisa. Strādājot ar piekļuves serveriem, tikai apvalks. Tāpēc šodien mēs parādīsim komandas, kuras var izmantot, lai pārbaudītu atmiņas lietojumu Linux sistēmā. Atmiņā ietilpst RAM un mijmaiņas iespēja.

Bieži vien ir svarīgi pārbaudīt koplietotās un apstrādes atmiņas lietojumu serveros, kā arī neizmantotos resursus. Ja izmantojat tīmekļa serveri, serverim ir jābūt pietiekami daudz atmiņas, lai apkalpotu vietnes apmeklētājus. Ja tas tā nav, vietne kļūs ļoti lēna vai pat nepieejama, kad palielinās trafika apjoms, jo nebūs pietiekami daudz atmiņas. Tas pats, kas notiek galddatorā.

1. Brīvā komanda

Bezmaksas komanda ir vienkāršākā un visvieglāk lietojamā komanda, lai pārbaudītu atmiņas lietojumu operētājsistēmā Linux. Šeit ir īss piemērs

$ brīvi -m kopā izmantotie bezmaksas koplietotie buferi kešatmiņā Atmiņa: 7976 6459 1517 0 865 2248 -/+ buferi/kešatmiņa: 3344 4631 Swap: 1951 0 1951

Opcija -m parāda visus datus megabaitos. Kopējais kopējais apjoms RAM Sistēmā instalēta 7976 MB, tas ir, 8 GB. Kolonna lietots parāda RAM apjomu, ko var izmantot uz Linux, mūsu gadījumā tas būs aptuveni 6,4 GB. Nozveja šeit ir skaļruņi kešatmiņā Un buferi. Otrajā rindā teikts, ka 4,6 GB ir bezmaksas. Šī ir brīvā atmiņa pirmajā rindā, pievienojot buferus un kešatmiņu.

Linux ir ieradums saglabāt kešatmiņu, lai uzlabotu veiktspēju, lai vajadzības gadījumā varētu atbrīvot atmiņu un izmantot to.
Pēdējā rinda ir atmiņas apmaiņa ( mijmaiņa), kas šajā gadījumā ir pilnīgi bez maksas.

2. /proc/meminfo

Nākamais veids, kā pārbaudīt atmiņas lietojumu, ir nolasīt /proc/meminfo failu. Ņemiet vērā, ka /proc failu sistēma nesatur reālus failus. Tie ir virtuāli faili, kas satur dinamisku informāciju par kodolu un sistēmu.

$ kat 309 056 kB Aktīvs ( fails): 521376 kB Neaktīvs (fails): 2472252 kB Neizvairāms: 5864 kB Bloķēts: 5880 kB Swap Kopā: 1998844 kB Apmaiņas brīvs: 1998844 kB Netīrs: 7180 kB Atpakaļ: 6B370 kB 80 kB Shmem: 311596 kB Slab : 200468 kB SAtprasāms: 151760 kB SNatprasīts: 48708 kB KernelStack: 6488 kB Lappušu tabulas: 78592 kB NFS_Nestabils: 0 kB Atlēciens: 0 kB Ierakstīts Tmp: 0 kB Kom 36 kB VmallocTo tal: 34359738367 kB VmallocLietots: 420204 kB VmallocChunk: 34359311104 kB Aparatūra Bojāta: 0 kB AnonHugeLapas: 0 kB Milzīgas lapas_kopā: 0 Milzīgas lapas_Bezmaksas: 0 Milzīgas lapas_Rsvd: 0 Milzīgas lapas B

Mainīsim Ubuntu uzvedību attiecībā uz RAM izmantošanu un mijmaiņu (swap partition). Ir parametrs vm.swappiness, kura noklusējuma vērtība ir 60, un tas kontrolē brīvās atmiņas procentuālo daļu, kurā sāksies aktīvā lapu ievietošana mijmaiņas nodalījumā. Citiem vārdiem sakot, pie 100-60=40% aizņemtās atmiņas Ubuntu jau sāks izmantot mijmaiņas nodalījumu. Plkst lielos daudzumos RAM datorā, labāk nomainīt vm.swappiness parametru uz 10 un tādējādi likt Ubuntu neizmantot swap, kamēr aizņemtā RAM nesasniedz 100-10=90%. Iestatīsim vērtību 10, nevis 60. Konsolē ievadiet šādu komandu:

Echo 10 > /proc/sys/vm/swappiness

Sysctl -w vm.swappiness=10

Lai saglabātu iestatījumu pēc atsāknēšanas, faila /etc/sysctl.conf beigās pievienojiet šādu rindiņu:

Vm.swappiness=10

Lai nekavējoties lietotu iestatījumu:

Sysctl -lpp

Turklāt mēs varam runāt par vēl vairākiem parametriem.
Pseidofailā vfs_cache_pressure tiek saglabāta vērtība - kešatmiņai atvēlētās atmiņas līmenis. Noklusējuma vērtība: 100. Šī parametra palielināšana liek kodolam aktīvāk izmest neizmantotās atmiņas lapas no kešatmiņas, t.i. Kešatmiņai atvēlētās RAM apjoms pieaugs lēnāk, kas savukārt samazinās iespējamību, ka tiks izmantots mijmaiņas nodalījums. Samazinot šo parametru, kodols, gluži pretēji, saglabās atmiņas lapas kešatmiņā ilgāk, tostarp mijmaiņas režīmā. Tas ir jēga, ja ir maz RAM, piemēram, ja mums ir 512 MB atmiņas, tad Parametru vfs_cache_pressure var iestatīt uz 50. Tas samazinās diska darbību skaitu mijmaiņas nodalījumā, tāpēc neizmantotās lapas tiks noņemtas retāk. Turpmāka šī parametra samazināšana var izraisīt atmiņas trūkumu.
Ja vēlaties paātrināt sistēmu un jums ir pietiekami daudz RAM (2 GB vai vairāk), mainiet sistēmas vērtību šādi: swappiness = 10, vfs_cache_pressure = 1000 (noklusējums 100), pievienojiet šo rindiņu failam /etc/sysctl. .conf fails:

Vm.vfs_cache_pressure=1000

vai lidojumā:

Sysctl -w vm.vfs_cache_pressure=1000

Kešatmiņa operētājsistēmā Linux

Kad dati tiek ierakstīti diskā (ar jebkuru programmu), Linux saglabā šo informāciju kešatmiņā atmiņas apgabalā, ko sauc par lapas kešatmiņu. Informāciju par šo atmiņas apgabalu var apskatīt, izmantojot komandas free, vmstat vai top. Pilna informācija Par šo atmiņas apgabalu varat skatīt /proc/meminfo failā. Tālāk ir sniegts šī faila piemērs serverī ar 4 GB RAM:

AtmiņaKopā: 3950112 kB
Brīvā atmiņa: 622560 kB
Buferi: 78048 kB
Kešatmiņā: 2901484 kB
SwapCached: 0 kB
Aktīvs: 3108012 kB
Neaktīvs: 55296 kB
AugstsKopā: 0 kB
HighFree: 0 kB
MazsKopā: 3950112 kB
Zems Brīvs: 622560 kB
SwapKopā: 4198272 kB
Bezmaksas apmaiņa: 4198244 kB
Netīrs: 416 kB
Pārrakstīšana: 0 kB
Kartēts: 999852 kB
Plāksne: 57104 kB
Saistīts_AS: 3340368 kB
Lappuses tabulas: 6672 kB
VmallocKopā: 536870911 kB
VmallocītsIzmantots: 35300 kB
VmallocChunk: 536835611 kB
Milzīgas lapas_kopā: 0
Milzīgas lapas_bezmaksas: 0
Milzīgs lapas izmērs: 2048 kB

Lapas kešatmiņas lielums tiek parādīts parametrā "Cached", šajā piemērā tas ir 2,9 GB. Kad lapas tiek ierakstītas atmiņā, parametra "Netīrs" lielums palielinās. Kad sākat rakstīt diskā, parametrs "Atrakstīties" palielināsies līdz ierakstīšanas beigām. Ir diezgan grūti redzēt "Writeback" parametru augstu, jo tā vērtība palielinās tikai aptaujas laikā, kad ievades/izvades (I/O) operācijas ir rindā, bet vēl nav ierakstītas diskā.
Linux parasti ieraksta kešatmiņas datus diskā, izmantojot pdflush procesu. Jebkurā brīdī sistēmā darbojas no 2 līdz 8 pdflush pavedieniem. Failā /proc/sys/vm/nr_pdflush_threads varat redzēt, cik šobrīd aktīvie pavedieni. Katru reizi, kad visi esošie pdflush pavedieni ir aizņemti vismaz 1 sekundi. Jaunie pavedieni mēģina rakstīt datus brīvās ierīču rindās, lai katrai aktīva ierīce bija 1 pavediena skalošanas dati no kešatmiņas. Katru reizi, kad paiet sekunde bez pdflush darbības, tiek noņemts 1 pavediens. Operētājsistēmā Linux varat konfigurēt minimālo un maksimālo pdflush pavedienu skaitu.

Notiek pdflush iestatīšana
Katru pdflush pavedienu kontrolē vairāki parametri mapē /proc/sys/vm:

  • /proc/sys/vm/dirty_writeback_centisecs (noklusējums 500): sekundes simtdaļās. Šis iestatījums norāda, cik bieži pdflush atsāk rakstīt datus diskā. Pēc noklusējuma ik pēc 5 sekundēm tiek atsākti 2 pavedieni.
    Var būt nedokumentēta darbība, kas kavē mēģinājumus samazināt dirty_writeback_centisecs, lai ļautu pdflush procesam agresīvāk saglabāt datus kešatmiņā. Piemēram, 2.6 Linux kodola sākotnējās versijās failā mm/page-writeback.c bija ietverta loģika, kas teica: "ja diska ierakstīšana aizņem ilgāku laiku nekā parametrs dirty_writeback_centisecs, iestatiet intervālu uz 1 sekundi." Šī loģika ir aprakstīta tikai kodola kodā, un tās darbība ir atkarīga no Linux kodola versijas. Tā kā tas nav īpaši labi, jūs tiksiet pasargāts no šī parametra samazināšanas.
  • code>/proc/sys/vm/dirty_expire_centiseconds (noklusējums 3000): sekunžu simtdaļās. Šis parametrs norāda, cik ilgi dati var palikt kešatmiņā, pirms tie ir jāieraksta diskā. Noklusējuma vērtība ir ļoti gara: 30 sekundes. Tas nozīmē, ka kad normāla darbība Kamēr kešatmiņā nav ierakstīts pietiekami daudz datu, lai izsauktu citu pdflush metodi, Linux neierakstīs datus diskā, kas ir bijis kešatmiņā mazāk nekā 30 sekundes.
  • /proc/sys/vm/dirty_background_ratio (noklusējums 10): maksimālā RAM procentuālā daļa, ko var aizpildīt lapas kešatmiņa pirms datu ierakstīšanas diskā. Dažas Linux kodola versijas var iestatīt šo parametru uz 5%.
    Lielākajā daļā dokumentācijas šis parametrs ir aprakstīts procentos no kopējās RAM, bet saskaņā ar pirmkodi Linux kodols nav. Aplūkojot meminfo, parametrs dirty_background_ratio tiek aprēķināts no vērtības MemFree + Cached - Mapped. Tātad mūsu demonstrācijas sistēmai 10% ir nedaudz mazāks par 250 MB, bet ne 400 MB.

Kad pdflush sāk ierakstīšanu?
Noklusējuma konfigurācijā diskā ierakstītie dati paliek atmiņā līdz:

Ja rakstīšanas operācijas serverī notiek bieži, tad kādu dienu tiks sasniegts parametrs dirty_background_ratio, un jūs varēsiet redzēt, ka visi ieraksti diskā iet tikai caur šo parametru, negaidot parametra dirty_expire_centiseconds derīguma termiņu.

Lapas rakstīšanas process
Parametrs /proc/sys/vm/dirty_ratio (noklusējums 40) ir maksimālā procentuālā daļa no kopējās RAM, ko var piešķirt lapas kešatmiņai, pirms pdflush ieraksta datus diskā.

Piezīme. Rakstot diskā, tiek bloķēti visi rakstīšanas procesi, ne tikai tie, kas ir aizpildījuši rakstīšanas buferi. Tādējādi viens process var bloķēt visas sistēmas ievades/izvades darbības.

Paraugprakse Linux optimizēšanai intensīvām rakstīšanas darbībām
Parasti, mēģinot palielināt diska apakšsistēmas veiktspēju, viņi saskaras ar problēmu, ka Linux vienlaikus buferē pārāk daudz informācijas. Tas ir īpaši pamanāms darbībām, kurām nepieciešama failu sistēmas sinhronizācija, izmantojot fsync izsaukumus. Ja šāda zvana laikā kešatmiņā ir daudz datu, sistēma var sastingt līdz šī zvana beigām.
Vēl viena izplatīta problēma rodas tāpēc, ka pirms fiziskā diska ierakstīšanas ir jāraksta pārāk daudz, kā rezultātā I/O darbības notiek biežāk nekā parastā darbība.

  • dirty_background_ratio: pamata regulēšanas rīks. Parasti šis parametrs tiek samazināts. Ja jūsu mērķis ir samazināt kešatmiņā saglabāto datu apjomu, lai dati diskā tiktu ierakstīti pakāpeniski, nevis visi uzreiz, tad šī parametra samazināšana ir visefektīvākais veids. Noklusējuma vērtība ir vispiemērotākā sistēmām ar lielu RAM un lēniem diskiem.
  • dirty_ratio: otrs svarīgākais konfigurējamais parametrs. Ja šis iestatījums ir ievērojami samazināts, lietojumprogrammas, kurām jāraksta diskā, tiks bloķētas kopā.
  • dirty_expire_centisecs: mēģiniet samazināt šo parametru, bet ne pārāk daudz. Tas ļauj samazināt laiku, ko lapas pavada kešatmiņā pirms ierakstīšanas diskā, bet, no otras puses, tas ievērojami samazinās vidējo ierakstīšanas ātrumu diskā, kas būs īpaši pamanāms sistēmās ar lēniem diskiem.

Rezultātā mēs iegūstam
Failā /etc/sysctl.conf mēs pievienojam:

Vm.dirty_background_ratio = 10 vm.dirty_ratio = 40

Pēc tam mēs sinhronizējam kešatmiņu un diska datus, notīrām kešatmiņu un saglabājam parametrus:

Sinhronizācija; echo 3 > /proc/sys/vm/drop_caches; sysctl -p

Lai samazinātu diska rakstīšanas pabeigšanas reižu skaitu, jums ir jāpielāgo:

Vm.dirty_writeback_centisecs = 15000

Tāpat kā jebkura cita operētājsistēma,Linux ir ļoti efektīva ar RAM. Pieejamā atmiņa tiek brīvi sadalīta starp procesiem, neizmantotās lapas tiek izskalotas diska mijmaiņas nodalījumā, un atmiņas pārpildes gadījumā tiek iedarbināts īpašs kodolā iebūvēts mehānisms, kas analizē visus procesus un iznīcina vainīgo.

Kad kāds process ieraksta datus diskā, kodols tos saglabā atsevišķā kešatmiņā. Ļoti bieži šī kešatmiņa aizņem diezgan daudz vietas. Šajā rakstā apskatīsim, kā atbrīvot atmiņu operētājsistēmā Linux vai precīzāk, kā notīrīt programmu izveidoto kešatmiņu.

Katrā Linux izplatīšanā varat izmantot trīs komandas, lai notīrītu Linux atmiņas kešatmiņu. Turklāt mums nav jāpabeidz nekādi procesi. Šīs ir komandas:

Page Cache notīrīšana:

sinhronizēt; echo 1 > /proc/sys/vm/drop_caches

Inode un dentri tīrīšana:

sinhronizēt; echo 2 > /proc/sys/vm/drop_caches

Inode un dentri un Page Cache tīrīšana:

sinhronizēt; echo 3 > /proc/sys/vm/drop_caches

Pirms kādas no šīm komandām palaišanas palaidiet:

Tas ir nepieciešams, jo katrai komandai ir nepieciešamas superlietotāja tiesības. Tagad apskatīsim, kas notiek, kad šīs komandas tiek izpildītas.

Sinhronizācijas utilīta liek sistēmai ierakstīt visus kešatmiņā saglabātos, bet vēl neierakstītos datus diskā. Tas ir nepieciešams, lai atbrīvotu pēc iespējas vairāk atmiņas. Pēc noklusējuma dati netiek dzēsti no kešatmiņas pēc ierakstīšanas diskā, tas ir nepieciešams, lai programma vajadzības gadījumā tos varētu nolasīt ātrāk.

Ja neizpildīsim sinhronizācijas komandu, mēs arī atbrīvosim vietu, bet pēc tās izpildes rezultāts būs labāks.

Sadalījuma simbols; pirms citas komandas izpildes liek apvalkam gaidīt, līdz tiek pabeigta pirmā komanda. Pēdējā komanda echo 1 > /proc/sys/vm/drop_caches ieraksta vērtību 1 failā /proc/sys/vm/drop_caches. Tas norāda kodolam, ka mums ir jāiztīra atlasītā veida kešatmiņa.

Kešatmiņas veidi operētājsistēmā Linux

Tagad apskatīsim kešatmiņas veidus, kas ļauj notīrīt šīs komandas, un kā tas viss darbojas.

Lapas kešatmiņa vai lapas kešatmiņa ir vieta, kur kodols ievieto visus datus, kurus ierakstījāt vai lasījāt no diska. Tas ievērojami paātrina sistēmu, jo, ja programmai ir nepieciešami tie paši dati otro reizi, tie vienkārši tiks ņemti no RAM. Bet šī iemesla dēļ šī kešatmiņa aizņem visvairāk vietas.

Varat skatīt lapas kešatmiņas lielumu, izmantojot bezmaksas utilītu. Šeit tas tiek parādīts pēdējā kolonnā - kešatmiņā:

Šāda veida kešatmiņa ir visefektīvākā un visdrošākā notīrīšanai.

Inode un dentri kešatmiņa attiecas arī uz failu sistēmu. Tikai tajā tiek ierakstīti nevis paši dati, bet gan failu sistēmas struktūra, failu un mapju atrašanās vieta. Kad tiek prasīts faila vai mapes satura atrašanās vieta, kodols ģenerē īpašas struktūras, kas satur visu šo informāciju. Nākamajā reizē, kad tiks veikts pieprasījums, struktūras jau tiks saglabātas atmiņā. Katrai failu sistēmai ir sava inode kešatmiņa un koplietojamā dentri kešatmiņa.

Šī kešatmiņa aizņem ļoti maz atmiņas. Dati tiek parādīti baitos, un, kā redzat, tie ir ļoti mazi. To var apskatīt ar komandu:

cat /proc/slabinfo | egrep dentry\|inode

Nav ieteicams to notīrīt, lai atbrīvotu Linux atmiņu, jo tiek patērēts maz atmiņas, un jauna failu sistēmas skenēšana aizņem salīdzinoši ilgu laiku.

Vai man vispār ir jātīra kešatmiņa?

Pirmkārt, ja tiek izmantots daudz atmiņas, iespējams, vēlēsities notīrīt lapas kešatmiņu, it īpaši, ja tā ir lapas kešatmiņa, kas aizņem daudz atmiņas. Otrkārt, jums var būt nepieciešams notīrīt Linux atmiņas kešatmiņu, ja esat mainījis kādu failu sistēmas vai kodola iestatījumus un tagad vēlaties pārbaudīt, kā tas ietekmēja lasīšanas/rakstīšanas darbību ātrumu. Šajā gadījumā jūs varat notīrīt visu kešatmiņu un darīt to bez pārstartēšanas, kas ir ļoti ērti.

Linux operētājsistēma ir veidota tā, ka pirms piekļūšanas diskam tiks apskatīta diska kešatmiņa un, ja ir nepieciešamie dati, diskam netiks piekļūts. Ja iztīrīsiet Linux kešatmiņu, operētājsistēma darbosies nedaudz lēnāk, jo tai būs jāmeklē dati diskā.

Automātiska kešatmiņas tīrīšana

Apskatīsim, kā katru dienu divos naktī automātiski notīrīt atmiņas kešatmiņu, izmantojot cron darba plānotāju.

Vispirms izveidosim bash skripts ar šādu saturu:

sudo vi /usr/local/bin/clearcache.sh

sinhronizēt; echo 1 > /proc/sys/vm/drop_caches

Mēs notīrīsim tikai lapas kešatmiņu, jo tā aizņem visvairāk. Mēs nepieskaramies citiem veidiem, lai nevajadzīgi nesamazinātu sistēmas veiktspēju.

sudo chmod 755 /usr/local/bin/clearcache.sh

Atliek tikai pievienot uzdevumu cron plānotājam. Lai to izdarītu, palaidiet komandu:

Un atvērtajā redaktorā pievienojiet rindu:

0 2 * * * /usr/local/bin/clearcache.sh

Tagad šis skripts darbosies katru nakti un iztīrīs atmiņu, lai serveris varētu darboties normāli.

Atmiņas kešatmiņas lieluma iestatīšana

Daudz ērtāk ir nevis katru reizi tīrīt kešatmiņu, bet iestatīt ierobežojumu, ja tas tiek pārsniegts, sistēma pati izdzēsīs nevajadzīgās lapas. Jūs nevarat skaidri ierobežot, cik megabaitu sistēma var izmantot kešatmiņai. Visa pieejamā atmiņa tiks izmantota pēc vajadzības, taču var pielāgot ātrumu, kādā lapas, kurām beidzies derīguma termiņš, tiek izņemtas no kešatmiņas.

Par to ir atbildīgs fails /proc/sys/vm/vfs_cache_pressure. Tajā ir relatīvs rādītājs tam, cik agresīvi jums vajadzētu noņemt lapas no kešatmiņas. Pēc noklusējuma parametrs ir iestatīts uz 100. Ja jūs to samazinat, kodols retāk dzēsīs lapas, un tas izraisīs ļoti strauju kešatmiņas palielināšanos. Ja iestatīts uz nulli, lapas vispār netiks dzēstas. Ja vērtība ir lielāka par 100, kešatmiņas lielums palielināsies lēnāk un neizmantotās lapas nekavējoties tiks noņemtas.

Piemēram, izveidosim minimālo kešatmiņas lielumu:

echo 1000 > /proc/sys/vm/vfs_cache_pressure

Neaizmirstiet, ka tas ievērojami samazinās jūsu sistēmas veiktspēju, jo dati tiks nolasīti no diska, nevis kešatmiņas.

Kā notīrīt mijmaiņas atmiņu

Mijmaiņas vietas notīrīšana ir ļoti vienkārša. Lai to izdarītu, palaidiet:

swapoff -a && swapon -a

Ņemiet vērā, ka, notīrot mijmaiņas darījumu, visi dati tiks pārsūtīti atpakaļ uz RAM.

Secinājumi

Tas arī viss. Jūs jau zināt, kā notīrīt Linux kešatmiņu un atbrīvot atmiņu. Neaizmirstiet, ka visas šajā rakstā sniegtās komandas ir jāizpilda kā superlietotājam, pretējā gadījumā nekas nedarbosies. Ja jums ir kādi jautājumi, jautājiet komentāros!

Saistītās ziņas:


Nesen vienā no virtuālie serveri Man radās problēma, kuras ierakstīšana diskā prasīja ilgu laiku. Un zem šīs tēmas es atradu interesantu, kurā detalizēti tika apspriests jautājums par to, kā diska rakstīšanas operāciju kešatmiņa darbojas Linux. Šodien būs šī raksta tulkojums.

Kešatmiņa operētājsistēmā Linux

Kad dati tiek ierakstīti diskā (ar jebkuru programmu), Linux saglabā šo informāciju kešatmiņā atmiņas apgabalā, ko sauc par lapas kešatmiņu. Informāciju par šo atmiņas apgabalu var apskatīt, izmantojot komandas bezmaksas, vmstat vai augšpusē. Pilna informācija par šo atmiņas apgabalu ir atrodama failā /proc/meminfo. Tālāk ir sniegts šī faila piemērs serverī ar 4 GB RAM:

Kopējā atmiņa: 3950112 kB Brīva atmiņa: 622560 kB Buferi: 78048 kB Kešatmiņā saglabāts: 2901484 kB SwapCached: 0 kB Aktīvs: 3108012 kB Neaktīvs: 55296 kB Augstākais Kopējais: 0 kB Totāls: 1 kB 9Fre : 62256 0 kB apmaiņas kopsumma: 4198272 kB apmaiņas bezmaksas : 4198244 kB Netīrs: 416 kB Ierakstīts: 0 kB Kartēts: 999852 kB Plāksne: 57104 kB Saistīts_AS: 3340368 kB Lappuses tabulas: 6672 kB VmallocKopā: 5368709911 kB3malloch0C 35 611 kB Milzīgas lapas_kopā: 0 milzīgas lapas_bezmaksas: 0 milzīgas lapas: 2048 kB

Lapas kešatmiņas lielums tiek parādīts parametrā "Cached", šajā piemērā tas ir 2,9 GB. Kad lapas tiek ierakstītas atmiņā, parametra "Netīrs" lielums palielinās. Kad sākat tieši rakstīt diskā, parametrs "Atrakstīties" palielināsies līdz ierakstīšanas beigām. Ir diezgan grūti redzēt "Writeback" parametru augstu, jo tā vērtība palielinās tikai aptaujas laikā, kad ievades/izvades (I/O) operācijas ir rindā, bet vēl nav ierakstītas diskā.
Linux parasti ieraksta datus no kešatmiņas diskā, izmantojot procesu pdflush. Jebkurā brīdī sistēmā darbojas no 2 līdz 8 pavedieniem pdflush. Failā /proc/sys/vm/nr_pdflush_threads Varat redzēt, cik aktīvo pavedienu pašlaik ir aktīvi. Katru reizi, kad visi esošie pdflush pavedieni ir aizņemti vismaz 1 sekundi. Jaunie pavedieni mēģina rakstīt datus brīvās ierīču rindās, lai katrai aktīvajai ierīcei būtu 1 pavediena izskalošanas dati no kešatmiņas. Katru reizi, kad paiet sekunde bez pdflush darbības, tiek noņemts 1 pavediens. Operētājsistēmā Linux varat konfigurēt minimālo un maksimālo pdflush pavedienu skaitu.

Notiek pdflush iestatīšana

Katru pdflush straumi kontrolē vairāki parametri /proc/sys/vm:

  • /proc/sys/vm/dirty_writeback_centisecs(noklusējuma 500): sekundes simtdaļās. Šis iestatījums norāda, cik bieži pdflush atsāk rakstīt datus diskā. Pēc noklusējuma ik pēc 5 sekundēm tiek atsākti 2 pavedieni.
    Var būt nedokumentēta darbība, kas kavē mēģinājumus samazināt dirty_writeback_centisecs, lai ļautu pdflush procesam agresīvāk saglabāt datus kešatmiņā. Piemēram, 2.6 Linux kodola sākotnējās versijās failā mm/page-writeback.c bija ietverta loģika, kas teica: "ja diska ierakstīšana aizņem ilgāku laiku nekā parametrs dirty_writeback_centisecs, iestatiet intervālu uz 1 sekundi." Šī loģika ir aprakstīta tikai kodola kodā, un tās darbība ir atkarīga no Linux kodola versijas. Tā kā tas nav īpaši labi, jūs tiksiet pasargāts no šī parametra samazināšanas.
  • /proc/sys/vm/dirty_expire_centiseconds(noklusējuma 3000): sekundes simtdaļās. Šis parametrs norāda, cik ilgi dati var palikt kešatmiņā, pirms tie ir jāieraksta diskā. Noklusējuma vērtība ir ļoti gara: 30 sekundes. Tas nozīmē, ka normālas darbības laikā, kamēr kešatmiņā nav ierakstīts pietiekami daudz datu, lai izsauktu citu pdflush metodi, Linux neierakstīs datus diskā, kas ir bijis kešatmiņā mazāk nekā 30 sekundes.
  • /proc/sys/vm/dirty_background_ratio(noklusējums 10): maksimālā RAM procentuālā daļa, ko var aizpildīt lapas kešatmiņa pirms datu ierakstīšanas diskā. Dažas Linux kodola versijas var iestatīt šo parametru uz 5%.

    Lielākajā daļā dokumentācijas šis iestatījums ir aprakstīts kā procentuālā daļa no kopējās RAM, taču saskaņā ar Linux kodola pirmkodu tas tā nav. Apskatot meminfo, no vērtības tiek aprēķināts parametrs dirty_background_ratio MemFree + Kešatmiņā — kartēts. Tātad mūsu demonstrācijas sistēmai 10% ir nedaudz mazāks par 250 MB, bet ne 400 MB.

Kopā: Kad pdflush sāk ierakstīšanu?

Noklusējuma konfigurācijā diskā ierakstītie dati paliek atmiņā līdz:

  • tie paliek atmiņā ilgāk par 30 sekundēm;
  • kešatmiņā saglabātās lapas aizņem vairāk nekā 10% no darba atmiņas.

Ja rakstīšanas operācijas serverī notiek bieži, tad kādu dienu tiks sasniegts parametrs dirty_background_ratio, un jūs varēsiet redzēt, ka visi ieraksti diskā iet tikai caur šo parametru, negaidot parametra dirty_expire_centiseconds derīguma termiņu.

Lapas rakstīšanas process

Parametrs /proc/sys/vm/dirty_ratio(noklusējums 40): maksimālā procentuālā daļa no kopējās RAM, ko var piešķirt lapas kešatmiņai, pirms pdflush ieraksta datus diskā.

Piezīme: rakstot diskā, rakstīšana tiek bloķēta visiem procesiem, ne tikai tiem, kas ir aizpildījuši rakstīšanas buferi. Tādējādi viens process var bloķēt visas sistēmas ievades/izvades darbības. Izpildi šo

Ieteikumi Linux optimizēšanai darbībām, kurām nepieciešama bieža ierakstīšana

Parasti cilvēki, mēģinot palielināt diska apakšsistēmas veiktspēju, saskaras ar problēmu, ka Linux vienlaikus buferē pārāk daudz informācijas. Tas ir īpaši sarežģīti darbībām, kurām nepieciešama failu sistēmas sinhronizācija, izmantojot fsync izsaukumus. Ja šāda zvana laikā kešatmiņā ir daudz datu, sistēma var sastingt līdz šī zvana beigām.
Vēl viena izplatīta problēma rodas tāpēc, ka pirms rakstīšanas fiziskajā diskā ir jāieraksta pārāk daudz I/O operāciju, kas notiek biežāk nekā parastā darbība. Jūs iegūsit ilgākus periodus, kad diska ierakstīšana nenotiks, kamēr lielā kešatmiņa nav pilna, un tad tiks aktivizēts viens no pdflush trigeriem un dati tiks ierakstīti ar maksimālo ātrumu.

netīrā_fona_attiecība: galvenais regulēšanas rīks, parasti samazina šo parametru. Ja jūsu mērķis ir samazināt kešatmiņā saglabāto datu apjomu, lai dati diskā tiktu ierakstīti pakāpeniski, nevis visi uzreiz, tad šī parametra samazināšana ir visefektīvākais veids. Noklusējuma vērtība ir pieņemamāka sistēmām ar lielu RAM un lēniem diskiem.

netīrās_attiecības: otrs svarīgākais konfigurējamais parametrs. Ja šis iestatījums ir ievērojami samazināts, lietojumprogrammas, kurām jāraksta diskā, tiks bloķētas kopā.

dirty_expire_centisecs: Mēģiniet to samazināt, bet ne daudz. Ļauj samazināt laiku, ko lapas pavada kešatmiņā pirms ierakstīšanas diskā, taču tas ievērojami samazinās vidējo ierakstīšanas ātrumu diskā, jo tas ir mazāk efektīvs. Tas būs īpaši pamanāms sistēmās ar lēniem diskiem.

Norādījumi parametru iestatīšanai

Failā /etc/sysctl.conf Mēs ievadām, piemēram:

Vm.dirty_background_ratio = 10 vm.dirty_ratio = 40

Pēc tam mēs sinhronizējam kešatmiņu un diska datus, notīrām kešatmiņu un saglabājam iestatījumus.

Sinhronizācija; echo 3 > /proc/sys/vm/drop_caches; sysctl -p

Runājot par veiktspējas optimizāciju Linux sistēmas, fiziskā atmiņa ir vissvarīgākais faktors. Protams, Linux piedāvā daudzas iespējas, lai kontrolētu vērtīgo atmiņas resursu izmantošanu. Dažādi rīki atšķiras pēc to uzraudzības precizitātes (piemēram, visā sistēmā, katram procesam, katram lietotājam), saskarnes (piemēram, grafiskā, komandrinda, ncurses) vai darbības režīmu (piemēram, interaktīvu, pakešu režīmu).

Šeit ir daļējs programmu saraksts ar grafiskais interfeiss vai komandrindu, lai jums būtu daudz, no kā izvēlēties, lai pārbaudītu izmantoto un brīvo atmiņu Linux platformās.

1. /proc/meminfo

Vienkāršākais veids, kā pārbaudīt RAM lietojumu, ir caur /proc/meminfo. Šis dinamiski atjauninātais virtuālais fails faktiski ir displeja informācijas avots daudziem citiem ar atmiņu saistītiem rīkiem, piemēram, bezmaksas, top un ps rīkiem. No pieejamā daudzuma/ fiziskā atmiņa līdz bufera apjomam, ko paredzēts ierakstīt atpakaļ diskā, /proc/meminfo satur visu, ko vēlaties uzzināt par lietošanu sistēmas atmiņa. Informācija par procesu atmiņu ir pieejama arī no /proc/ /statm un /proc/ /statuss

$ cat /proc/meminfo

2. augšpusē

Komanda atop ir uz ncurses balstīta interaktīva sistēma un procesa novērotājs termināļa videi. Tas parāda dinamiski atjauninātu kopsavilkuma informāciju par sistēmas avotiem (CPU, atmiņa, tīkls, I/O, kodols) ar krāsu kodiem brīdinājumiem, ja liela slodze sistēmas. Tā var arī kārtot procesus (vai lietotājus) pēc to lielākā resursu patēriņa sistēmas administrators var pateikt, kurš process vai lietotājs ir atbildīgs par sistēmas sāknēšanu. Atmiņas statistikas pārskati ietver kopējo/brīvo atmiņu, kešatmiņā saglabāto/buferizēto atmiņu un atmiņas informāciju. virtuālā atmiņa.

$ sudo atop

3.bezmaksas

Bezmaksas komanda ir ātrs un vienkāršs veids, kā iegūt pārskatu par atmiņas lietojumu, kas iegūts no /proc/meminfo. Tas parāda kopējās/pieejamās fiziskās atmiņas un sistēmas mijmaiņas momentuzņēmumu, kā arī izmantoto/brīvo bufera vietu kodolā.

4. GNOME sistēmas monitors

GNOME sistēmas monitors ir grafiskā lietojumprogramma kas ir parādīts īsa vēsture izmantot sistēmas resursi CPU, atmiņai, mijmaiņas vietai un tīklam. Tas piedāvā arī CPU un atmiņas lietojuma uzraudzības procesu.

$gnome-sistēmas monitors

5.htop

Komanda htop ir uz ncurses balstīts interaktīvs procesu skatītājs, kas reāllaikā parāda atmiņas lietojumu katram procesam. Tas var ziņot par procesa atmiņas nospiedumu galvenajā atmiņā (RSS), kopējo programmas lielumu atmiņā, bibliotēkas lielumu, kopējo lapas izmēru un netīrās lapas lielumu (kešatmiņā) visiem darbojošajiem procesiem. Visu procesu (sakārtoto) sarakstu varat ritināt horizontāli vai vertikāli.

6. KDE sistēmas monitors

Kamēr GNOME darbvirsmai ir GNOME sistēmas monitors, KDE darbvirsmai ir savs līdzinieks: KDE sistēmas monitors. Tās funkcionalitāte galvenokārt ir līdzīga GNOME versijai, t.i., parāda reāllaika sistēmas resursu izmantošanas vēsturi, kā arī atsevišķu procesu CPU/atmiņas patēriņu.

$ksysguard

7. memstat

Memstat utilīta ir noderīga, lai noteiktu, kuri izpildāmie procesi un koplietojamās bibliotēkas patērē virtuālo atmiņu. Iegūstot procesa ID, memstat atklāj, cik daudz virtuālās atmiņas izmanto izpildāmais kods, dati un koplietojamās bibliotēkas, kas saistītas ar šo procesu.

$ memstat - lpp

8.nmon

nmon utilīta ir uz ncurses balstīts sistēmas etalona rīks, kas uzrauga centrālo procesoru, atmiņu, diska I/O, kodolu, failu sistēma un tiešsaistes avoti. Pamatojoties uz atmiņas lietojumu, tas var parādīt tādu informāciju kā kopējā/brīvā atmiņa, mijmaiņas vieta, buferizētā/kešatmiņā saglabātā atmiņa, ielādētās/izlādētās virtuālās atmiņas statistika, un tas viss notiek reāllaikā.

9.ps

Komanda ps var parādīt atsevišķu procesu atmiņas lietojumu reāllaikā. Parādītajā atmiņas lietojuma informācijā ietilpst %MEM (izmantotās fiziskās atmiņas procentuālā daļa), VSZ (kopējais izmantotās virtuālās atmiņas apjoms) un RSS (kopējais izmantotās fiziskās atmiņas apjoms). Procesu sarakstu var kārtot, izmantojot opciju “–kārtot”. Piemēram, lai kārtotu dilstošā RSS secībā:

$ ps aux --sort -rss

10. smem

Komanda smem ļauj izmērīt dažādu procesu un lietotāju fiziskās atmiņas lietojumu, pamatojoties uz informāciju, kas pieejama no /proc. Šī utilīta izmanto proporcionālās kopas lieluma (PSS) metriku, lai precīzi novērtētu Linux procesu efektīvo atmiņas lietojumu. Atmiņas izmantošanas analīzi var eksportēt uz grafiskām joslu un šķēlumu diagrammām.

$ sudo smem --pīrāga nosaukums -c "pss"

11.augšā

Augšējā komanda piedāvā reāllaika darbības procesu uzraudzību, kā arī dažādu procesu statistiku par resursu izmantošanu. Ar atmiņu saistītā informācija ietver %MEM (izmantotās atmiņas procentuālais daudzums), VIRT (kopējais izmantotās virtuālās atmiņas apjoms), SWAP (samainītās virtuālās atmiņas apjoms), CODE (koda izpildei atvēlētās fiziskās atmiņas apjoms), DATA (fiziskās atmiņas apjoms). atmiņa, kas piešķirta neizpildīšanai). Varat kārtot procesu sarakstu, pamatojoties uz atmiņas lietojumu vai lielumu.

12.vmstat

Komandrindas utilīta vmstat parāda tūlītēju un vidējo statistiku par dažādām sistēmas darbībām, tostarp CPU, atmiņu, pārtraukumiem un diska I/O. Kā atmiņas informācijas avots šī komanda parāda ne tikai fiziskās atmiņas lietojumu (piem., kopējo/izmantoto atmiņu un atmiņas buferi/kešatmiņu), bet arī virtuālās atmiņas statistiku (piem., ielādes/lapu atmiņa, lappuses/ielādēta).

Komandrindas utilīta vmstat parāda tūlītēju un vidējo statistiku par dažādām sistēmas darbībām, kas aptver centrālo procesoru, atmiņu, pārtraukumus, un disks I/O. Kas attiecas uz atmiņas informāciju, komanda parāda ne tikai fiziskās atmiņas lietojumu (piemēram, kopējo/izmantoto atmiņu un bufera/kešatmiņas atmiņu), bet arī virtuālās atmiņas statistiku (piem., atmiņa ievadīta/izņemta, mijmaiņa iekšā/izņemta).

$ vmstat -s

© 2024 ermake.ru - Par datoru remontu - Informācijas portāls