Cum se limitează memoria cache a fișierelor în CentOS (Linux)? Configurarea Swappiness și stocarea în cache în Linux Gestionarea cache-ului cache în kernel-ul Linux 2.4.

Acasă / Nu se aprinde
În Linux, aproape toate comenzile sunt fără interfață grafică. Când lucrați pe servere de acces, numai shell-ul. Așa că astăzi vom arăta comenzi care pot fi folosite pentru a verifica utilizarea memoriei pe un sistem Linux. Memoria include RAM și swap.

Este adesea important să verificați utilizarea memoriei partajate și procesate pe servere, precum și resursele neutilizate. Dacă rulați un server web, atunci serverul trebuie să aibă suficientă memorie pentru a servi vizitatorii site-ului. Dacă nu este cazul, atunci site-ul va deveni foarte lent sau chiar va deveni indisponibil atunci când există o creștere a traficului, pur și simplu pentru că nu va fi suficientă memorie. Același lucru cu ceea ce se întâmplă pe un computer desktop.

1. Comandă liberă

Comanda gratuită este cea mai simplă și mai ușor de utilizat comandă pentru a verifica utilizarea memoriei pe Linux. Iată un exemplu scurt

$ gratuit -m total folosit gratuit buffere partajate memorate în cache Mem: 7976 6459 1517 0 865 2248 -/+ buffere/cache: 3344 4631 Schimbare: 1951 0 1951

Opţiune -m afișează toate datele în megaocteți. Volumul total total RAM 7976 MB instalați pe sistem, adică 8 GB. Coloană folosit arată cantitatea de RAM care poate fi folosită pe Linux, în cazul nostru va fi de aproximativ 6,4 GB. Captura aici sunt difuzoarele stocate în cacheŞi tampoane. A doua linie spune că 4,6 GB sunt gratuit. Aceasta este memoria liberă din prima linie cu adăugarea de buffere și memorie cache.

Linux are obiceiul de a stoca în cache pentru a îmbunătăți performanța, astfel încât memoria să poată fi eliberată și utilizată atunci când este necesar.
Ultima linie este schimbarea memoriei ( schimb), care în acest caz este complet gratuit.

2. /proc/meminfo

Următorul mod de a verifica utilizarea memoriei este să citiți fișierul /proc/meminfo. Rețineți că sistemul de fișiere /proc nu conține fișiere reale. Sunt fișiere virtuale care conțin informații dinamice despre kernel și sistem.

$ cat /proc/meminfo MemTotal: 8167848 kB MemFree: 1409696 kB Buffere: 961452 kB Memorate în cache: 2347236 kB Încadrate în cache: 0 kB Active: 3124752 kB Inactiv: 2781452 kB Inactiv: 2787236 kB 309 056 kB Activ (fișier): 521376 kB Inactiv(fișier): 2472252 kB Inevizibil: 5864 kB Mblocat: 5880 kB SchimbareTotal: 1998844 kB SchimbFree: 1998844 kB Murdar: 7180 kB Scriere înapoi: 8 kB Mapped: 8 260 kB kB Shmem: 311596 kB Slab : 200468 kB SReclaimable: 151760 kB SUnreclaim: 48708 kB KernelStack: 6488 kB PageTables: 78592 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB Committed: 0 kB Committed: 396796 kB VmallocTo tal: 34359738367 kB VmallocUtilizat: 420204 kB VmallocChunk: 34359311104 kB HardwareCorupt: 0 kB AnonHugePages: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 HugepagesSize: 2048 kB DirectMap464M: 62 kB DirectMap464M: 8 kB:

Să schimbăm comportamentul Ubuntu în ceea ce privește utilizarea RAM și schimbul (partiția de schimb). Există un parametru numit vm.swappiness, care are o valoare implicită de 60 și controlează procentul de memorie liberă la care va începe descărcarea activă a paginilor în partiția de swap. Cu alte cuvinte, la 100-60=40% din memoria ocupată, Ubuntu va începe deja să folosească partiția de swap. La cantitati mari RAM în computer, este mai bine să schimbați parametrul vm.swappiness la 10 și, prin urmare, să ordonați Ubuntu să nu folosească swap până când RAM-ul ocupat ajunge la 100-10=90%. Să setăm valoarea la 10 în loc de 60. În consolă, introduceți următoarea comandă:

Echo 10 > /proc/sys/vm/swappiness

Sysctl -w vm.swappiness=10

Pentru a salva setarea după o repornire, adăugați următoarea linie la sfârșitul fișierului /etc/sysctl.conf:

Vm.swappiness=10

Pentru a aplica imediat setarea:

Sysctl -p

În plus, putem vorbi despre mai mulți parametri.
Pseudo-fișierul vfs_cache_pressure stochează o valoare - nivelul de memorie alocat pentru cache. Valoare implicită: 100. Mărirea acestui parametru face ca nucleul să elimine mai activ paginile de memorie neutilizate din cache, de exemplu. Cantitatea de RAM alocată cache-ului va crește mai lent, ceea ce, la rândul său, va reduce probabilitatea ca partiția de swap să fie utilizată. Scăzând acest parametru, nucleul, dimpotrivă, va păstra paginile de memorie în cache, inclusiv în swap. Acest lucru are sens atunci când există o cantitate mică de RAM, de exemplu, dacă avem 512 MB de memorie, atunci Parametrul vfs_cache_pressure poate fi setat la 50. Acest lucru va reduce numărul de operații pe disc în partiția de swap, astfel încât eliminarea paginilor neutilizate va avea loc mai rar.
Dacă doriți să accelerați sistemul și aveți suficientă RAM (2 GB sau mai mult), atunci modificați valoarea sistemului astfel: swappiness = 10, vfs_cache_pressure = 1000 (implicit 100), adăugați următoarea linie la /etc/sysctl fișier .conf:

Vm.vfs_cache_pressure=1000

sau din mers:

Sysctl -w vm.vfs_cache_pressure=1000

Memorarea în cache în Linux

Când datele sunt scrise pe disc (de către orice program), Linux memorează aceste informații într-o zonă de memorie numită Page Cache. Informațiile despre această zonă de memorie pot fi vizualizate folosind comenzile free, vmstat sau top. Informații complete Puteți vedea despre această zonă de memorie în fișierul /proc/meminfo. Mai jos este un exemplu al acestui fișier pe un server cu 4 GB RAM:

MemTotal: 3950112 kB
MemFree: 622560 kB
Buffere: 78048 kB
Memorate în cache: 2901484 kB
Schimbat în cache: 0 kB
Activ: 3108012 kB
Inactiv: 55296 kB
HighTotal: 0 kB
HighFree: 0 kB
ScăzutTotal: 3950112 kB
LowFree: 622560 kB
Schimb total: 4198272 kB
Schimb gratuit: 4198244 kB
Murdar: 416 kB
Scriere inversă: 0 kB
Cartografiat: 999852 kB
Placă: 57104 kB
Committed_AS: 3340368 kB
PageTabele: 6672 kB
VmallocTotal: 536870911 kB
VmallocUtilizat: 35300 kB
VmallocChunk: 536835611 kB
HugePages_Total: 0
HugePages_Free: 0
Dimensiune mare a paginii: 2048 kB

Dimensiunea cache a paginii este afișată în parametrul „Memorie în cache”, în acest exemplu este de 2,9 GB. Pe măsură ce paginile sunt scrise în memorie, dimensiunea parametrului „Murdar” crește. Când începeți să scrieți pe disc, parametrul „Writeback” va crește până la sfârșitul înregistrării. Este destul de dificil să vezi parametrul „Writeback” ridicat, deoarece valoarea acestuia crește doar în timpul sondajului, când operațiunile de intrare/ieșire (I/O) sunt puse în coadă, dar nu sunt încă scrise pe disc.
Linux scrie de obicei datele cache pe disc folosind procesul pdflush. În orice moment, există de la 2 la 8 fire pdflush care rulează pe sistem. În fișierul /proc/sys/vm/nr_pdflush_threads puteți vedea câte în acest moment fire active. De fiecare dată când toate firele pdflush existente sunt ocupate timp de cel puțin 1 secundă. Firele noi încearcă să scrie date în cozile libere de dispozitive, astfel încât pentru fiecare dispozitiv activ a existat 1 fir de date de spălare din cache. De fiecare dată când trece o secundă fără activitate de la pdflush, 1 fir este eliminat. În Linux, puteți configura numărul minim și maxim de fire pdflush.

Configurarea pdflush
Fiecare fir pdflush este controlat de mai mulți parametri în /proc/sys/vm:

  • /proc/sys/vm/dirty_writeback_centisecs (implicit 500): în sutimi de secunde. Această setare indică cât de des reia pdflush să scrie date pe disc. În mod implicit, 2 fire sunt reluate la fiecare 5 secunde.
    Poate exista un comportament nedocumentat care împiedică încercările de a reduce dirty_writeback_centisecs pentru a permite procesului pdflush să memoreze datele în cache mai agresiv. De exemplu, în versiunile timpurii ale nucleului Linux 2.6, fișierul mm/page-writeback.c includea logica care spunea „dacă scrierile pe disc durează mai mult decât parametrul dirty_writeback_centisecs, atunci setați intervalul la 1 secundă”. Această logică este descrisă numai în codul nucleului, iar funcționarea ei depinde de versiunea nucleului Linux. Deoarece acest lucru nu este foarte bun, veți fi protejat de reducerea acestui parametru.
  • code>/proc/sys/vm/dirty_expire_centiseconds (implicit 3000): în sutimi de secunde. Acest parametru specifică cât timp pot rămâne datele în cache înainte de a fi scrise pe disc. Valoarea implicită este foarte lungă: 30 de secunde. Aceasta înseamnă că atunci când funcţionare normală Până când nu au fost scrise suficiente date în cache pentru a apela o altă metodă pdflush, Linux nu va scrie date pe discul care a fost în cache mai puțin de 30 de secunde.
  • /proc/sys/vm/dirty_background_ratio (implicit 10): procentul maxim de RAM care poate fi umplut de memoria cache a paginii înainte de scrierea datelor pe disc. Unele versiuni ale nucleului Linux pot seta acest parametru la 5%.
    Majoritatea documentației descriu acest parametru ca procent din RAM totală, dar în conformitate cu codurile sursă Nucleul Linux nu este. Privind meminfo, parametrul dirty_background_ratio este calculat din valoarea MemFree + Cached - Mapped. Deci, pentru sistemul nostru demo, 10% este puțin mai puțin de 250MB, dar nu 400MB.

Când începe înregistrarea pdflush?
În configurația implicită, datele scrise pe disc rămân în memorie până când:

Dacă operațiunile de scriere au loc frecvent pe server, atunci într-o zi va fi atins parametrul dirty_background_ratio și veți putea vedea că toate scrierile pe disc trec doar prin acest parametru fără a aștepta expirarea parametrului dirty_expire_centiseconds.

Procesul de scriere a paginii
Parametrul /proc/sys/vm/dirty_ratio (implicit 40) este procentul maxim din RAM total care poate fi alocat cache-ului paginii înainte ca pdflush să scrie date pe disc.

Notă: În timpul scrierii pe disc, toate procesele de scriere sunt blocate, nu doar cel care a umplut tamponul de scriere. Acest lucru poate determina ca un proces să blocheze toate operațiunile I/O de pe sistem.

Cele mai bune practici pentru optimizarea Linux pentru operațiuni intensive de scriere
De obicei, atunci când încearcă să mărească performanța subsistemului de disc, aceștia întâmpină problema că Linux memorează prea multe informații simultan. Acest lucru este vizibil în special pentru operațiunile care necesită sincronizarea sistemului de fișiere folosind apeluri fsync. Dacă în timpul unui astfel de apel există o mulțime de date în cache, atunci sistemul se poate bloca până la încheierea acestui apel.
O altă problemă comună apare deoarece trebuie scris prea mult înainte ca discul fizic să fie scris, ceea ce face ca operațiunile I/O să apară mai frecvent decât operațiunile normale.

  • dirty_background_ratio: Instrument de reglare de bază. De obicei, acest parametru este redus. Dacă obiectivul dvs. este să reduceți cantitatea de date stocate în cache, astfel încât datele să fie scrise pe disc treptat și nu toate odată, atunci reducerea acestui parametru este cea mai eficientă modalitate. Valoarea implicită este cea mai potrivită pentru sistemele cu multă memorie RAM și discuri lente.
  • dirty_ratio: al doilea cel mai important parametru de configurat. Dacă această setare este redusă semnificativ, aplicațiile care trebuie să scrie pe disc vor fi blocate împreună.
  • dirty_expire_centisecs: Încercați să reduceți acest parametru, dar nu prea mult. Vă permite să reduceți timpul petrecut de pagini în cache înainte de a fi scrise pe disc, dar, pe de altă parte, acest lucru va reduce semnificativ viteza medie de scriere pe disc, ceea ce va fi vizibil mai ales pe sistemele cu discuri lente.

Ca rezultat obținem
În fișierul /etc/sysctl.conf adăugăm:

Vm.dirty_background_ratio = 10 vm.dirty_ratio = 40

Apoi sincronizăm memoria cache și datele de pe disc, ștergem memoria cache și salvăm parametrii:

Sincronizare; echo 3 > /proc/sys/vm/drop_caches; sysctl -p

Pentru a reduce numărul de finalizări de scriere pe disc, trebuie să ajustați:

Vm.dirty_writeback_centisecs = 15000

Ca oricare altul sistem de operare,Linux este foarte eficient cu RAM. Memoria disponibilă este distribuită liber între procese, paginile neutilizate sunt eliminate în partiția de swap de pe disc și, în cazul depășirii memoriei, este declanșat un mecanism special încorporat în nucleu, care analizează toate procesele și distruge vinovatul.

Când orice proces scrie date pe disc, acestea sunt stocate de nucleu într-un cache separat. Foarte des, această memorie cache ocupă destul de mult spațiu. În acest articol ne vom uita la cum să eliberați memorie în Linux sau, mai precis, cum să ștergeți memoria cache creată de programe.

În fiecare distribuție Linux, puteți utiliza trei comenzi pentru a șterge memoria cache a memoriei Linux. Mai mult, nu trebuie să finalizam niciun proces. Acestea sunt comenzile:

Ștergerea cache a paginii:

sincronizare; echo 1 > /proc/sys/vm/drop_caches

Curățarea inodului și a dentirilor:

sincronizare; echo 2 > /proc/sys/vm/drop_caches

Curățarea inodului și a denturilor și a PageCache:

sincronizare; echo 3 > /proc/sys/vm/drop_caches

Înainte de a rula oricare dintre aceste comenzi, rulați:

Acest lucru este necesar deoarece fiecare comandă necesită drepturi de superutilizator pentru a funcționa. Acum să ne uităm la ce se întâmplă atunci când aceste comenzi sunt executate.

Utilitarul de sincronizare forțează sistemul să scrie pe disc toate datele stocate în cache, dar care nu sunt încă scrise. Acest lucru este necesar pentru a elibera cât mai multă memorie posibil. În mod implicit, datele nu sunt șterse din cache după ce au fost scrise pe disc, acest lucru este necesar pentru ca programul să le poată citi mai repede dacă este necesar.

Dacă nu executăm comanda de sincronizare, vom elibera și puțin spațiu, dar după ce o executăm, rezultatul va fi mai bun.

Simbol al diviziunii; spune shell-ului să aștepte până când prima comandă se finalizează înainte de a executa o altă comandă. Ultima comandă echo 1 > /proc/sys/vm/drop_caches scrie valoarea 1 în fișierul /proc/sys/vm/drop_caches. Acest lucru semnalează nucleului că trebuie să ștergem tipul de cache pe care l-am selectat.

Tipuri de cache în Linux

Acum să ne uităm la tipurile de cache care vă permit să ștergeți aceste comenzi și cum funcționează totul.

PageCache sau cache-ul paginii este locul în care nucleul pune toate datele pe care le-ați scris sau citite de pe disc. Acest lucru accelerează foarte mult sistemul, deoarece dacă programul are nevoie de aceleași date a doua oară, va fi pur și simplu preluat din RAM. Dar din acest motiv, acest cache ocupă cel mai mult spațiu.

Puteți vizualiza dimensiunea memoriei cache a paginii folosind utilitarul gratuit. Aici este afișat în ultima coloană - în cache:

Acest tip de cache este cel mai eficient și cel mai sigur de șters.

Cache inode și dentrie se aplică și sistemului de fișiere. Numai că nu datele în sine sunt scrise în el, ci structura sistemului de fișiere, locația fișierelor și folderelor. Când i se cere locația unui fișier sau conținutul unui folder, nucleul generează structuri speciale care conțin toate aceste informații. Data viitoare când se face cererea, structurile vor fi deja stocate în memorie. Fiecare sistem de fișiere are propriul său cache inode și un cache dentrie partajat.

Acest cache ocupă foarte puțină memorie. Datele sunt prezentate în octeți și, după cum puteți vedea, sunt foarte mici. Îl poți vizualiza cu comanda:

cat /proc/slabinfo | egrep dentry\|inode

Ștergerea acestuia pentru a elibera memoria Linux nu este recomandată, deoarece se consumă puțină memorie, iar o nouă scanare a sistemului de fișiere durează relativ mult timp.

Trebuie să șterg deloc memoria cache?

În primul rând, dacă se utilizează multă memorie, poate doriți să ștergeți memoria cache a paginii, mai ales dacă memoria cache a paginii este cea care ocupă multă memorie. În al doilea rând, poate fi necesar să ștergeți memoria cache-ului Linux dacă ați modificat orice setări ale sistemului de fișiere sau ale nucleului și acum doriți să verificați cum a afectat acest lucru viteza operațiunilor de citire/scriere. În acest caz, puteți șterge toate cache-urile și puteți face acest lucru fără a reporni, ceea ce este foarte convenabil.

Sistemul de operare Linux este proiectat în așa fel încât înainte de a accesa discul, cache-ul discului va fi analizat, iar dacă există datele necesare, discul nu va fi accesat. Dacă ștergeți memoria cache Linux, sistemul de operare va rula puțin mai lent, deoarece va trebui să caute date pe disc.

Ștergerea automată a memoriei cache

Să ne uităm la cum să ștergeți automat memoria cache în fiecare zi, la două dimineața, folosind programatorul de job cron.

Mai întâi să creăm scriptul bash cu urmatorul continut:

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

sincronizare; echo 1 > /proc/sys/vm/drop_caches

Vom șterge doar memoria cache a paginii, deoarece ocupă cel mai mult. Nu vom atinge alte tipuri, pentru a nu reduce inutil performanța sistemului.

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

Tot ce rămâne este să adăugați sarcina la programatorul cron. Pentru a face acest lucru, executați comanda:

Și în editorul care se deschide, adăugați linia:

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

Acum, acest script va rula în fiecare noapte și va curăța memoria, astfel încât serverul să poată rula normal.

Setarea dimensiunii memoriei cache

Este mult mai convenabil să nu ștergeți memoria cache de fiecare dată, dar să setați o limită, dacă este depășită, sistemul însuși va șterge paginile inutile. Nu puteți limita în mod explicit câți megaocteți poate folosi sistemul pentru cache. Toată memoria disponibilă va fi utilizată după cum este necesar, dar rata la care paginile expirate sunt eliminate din cache poate fi ajustată.

Fișierul /proc/sys/vm/vfs_cache_pressure este responsabil pentru acest lucru. Conține o măsură relativă a cât de agresiv ar trebui să eliminați paginile din cache. Implicit, parametrul este setat la 100. Dacă îl reduceți, nucleul va șterge paginile mai rar și acest lucru va duce la o creștere foarte rapidă a memoriei cache. Dacă se setează la zero, paginile nu vor fi șterse deloc. Dacă valoarea este mai mare de 100, dimensiunea memoriei cache va crește mai lent și paginile neutilizate vor fi eliminate imediat.

De exemplu, să facem dimensiunea minimă a memoriei cache:

echo 1000 > /proc/sys/vm/vfs_cache_pressure

Nu uitați că acest lucru va reduce foarte mult performanța sistemului dvs. deoarece datele vor fi citite de pe disc în loc de cache.

Cum să ștergeți memoria de schimb

Eliberarea spațiului de schimb este foarte ușor. Pentru a face acest lucru, rulați:

swapoff -a && swapon -a

Rețineți că atunci când ștergeți schimbul, toate datele vor fi transferate înapoi în RAM.

Concluzii

Asta este. Știți deja cum să ștergeți memoria cache Linux și să eliberați memorie. Nu uitați că toate comenzile date în acest articol trebuie executate ca superutilizator, altfel nimic nu va funcționa. Dacă aveți întrebări, întrebați în comentarii!

Postări înrudite:


Recent la unul dintre servere virtuale Am întâmpinat o problemă care a durat mult timp pentru a scrie pe disc. Și sub acest subiect am găsit unul interesant, care a discutat în detaliu problema modului în care funcționează stocarea în cache a operațiunilor de scriere pe disc în Linux. Astăzi va exista o traducere a acestui articol.

Memorarea în cache în Linux

Când datele sunt scrise pe disc (de către orice program), Linux memorează aceste informații într-o zonă de memorie numită Page Cache. Informațiile despre această zonă de memorie pot fi vizualizate folosind comenzile gratuit, vmstat sau top. Informații complete despre această zonă de memorie pot fi găsite în fișier /proc/meminfo. Mai jos este un exemplu al acestui fișier pe un server cu 4 GB RAM:

MemTotal: 3950112 kB MemFree: 622560 kB Buffere: 78048 kB În cache: 2901484 kB Schimbat în cache: 0 kB Activ: 3108012 kB Inactiv: 55296 kB ÎnaltTotal: 0 kB Scăzut: 10 kB Scăzut: 10 kB e: 62256 0 kB SchimbTotal: 4198272 kB SchimbFree : 4198244 kB Murdar: 416 kB Scriere inversă: 0 kB Mapat: 999852 kB Slab: 57104 kB Committed_AS: 3340368 kB PageTable: 6672 kB VmallocTotal: 536870911 Vmalloc353 kB Vmalloc 6835 611 kB Pagini uriașe_Total: 0 Pagini uriașe_Free: 0 Dimensiune pagini uriașe: 2048 kB

Dimensiunea cache a paginii este afișată în parametrul „Memorie în cache”, în acest exemplu este de 2,9 GB. Pe măsură ce paginile sunt scrise în memorie, dimensiunea parametrului „Murdar” crește. Când începeți să scrieți direct pe disc, parametrul „Writeback” va crește până la sfârșitul înregistrării. Este destul de dificil să vezi parametrul „Writeback” ridicat, deoarece valoarea acestuia crește doar în timpul sondajului, când operațiunile de intrare/ieșire (I/O) sunt puse în coadă, dar nu sunt încă scrise pe disc.
Linux scrie de obicei date din memoria cache pe disc folosind un proces pdflush. În orice moment, în sistem rulează de la 2 la 8 fire pdflush. În dosar /proc/sys/vm/nr_pdflush_threads Puteți vedea câte fire active sunt active în prezent. De fiecare dată când toate firele pdflush existente sunt ocupate timp de cel puțin 1 secundă. Firele noi încearcă să scrie date în cozile libere de dispozitive, astfel încât pentru fiecare dispozitiv activ să existe 1 fir de date de ștergere din cache. De fiecare dată când trece o secundă fără activitate de la pdflush, 1 fir este eliminat. În Linux, puteți configura numărul minim și maxim de fire pdflush.

Configurarea pdflush

Fiecare flux pdflush este controlat de mai mulți parametri în /proc/sys/vm:

  • /proc/sys/vm/dirty_writeback_centisecs(implicit 500): în sutimi de secunde. Această setare indică cât de des reia pdflush să scrie date pe disc. În mod implicit, 2 fire sunt reluate la fiecare 5 secunde.
    Poate exista un comportament nedocumentat care împiedică încercările de a reduce dirty_writeback_centisecs pentru a permite procesului pdflush să memoreze datele în cache mai agresiv. De exemplu, în versiunile timpurii ale nucleului Linux 2.6, fișierul mm/page-writeback.c includea logica care spunea „dacă scrierile pe disc durează mai mult decât parametrul dirty_writeback_centisecs, atunci setați intervalul la 1 secundă”. Această logică este descrisă numai în codul nucleului, iar funcționarea ei depinde de versiunea nucleului Linux. Deoarece acest lucru nu este foarte bun, veți fi protejat de reducerea acestui parametru.
  • /proc/sys/vm/dirty_expire_centiseconds(implicit 3000): în sutimi de secunde. Acest parametru specifică cât timp pot rămâne datele în cache înainte de a fi scrise pe disc. Valoarea implicită este foarte lungă: 30 de secunde. Aceasta înseamnă că, în timpul funcționării normale, până când au fost scrise suficiente date în cache pentru a apela o altă metodă pdflush, Linux nu va scrie date pe discul care a fost în cache pentru mai puțin de 30 de secunde.
  • /proc/sys/vm/dirty_background_ratio(implicit 10): procentul maxim de RAM care poate fi umplut de memoria cache a paginii înainte de a scrie date pe disc. Unele versiuni ale nucleului Linux pot seta acest parametru la 5%.

    Majoritatea documentației descriu această setare ca un procent din RAM totală, dar conform codului sursă al nucleului Linux, nu este cazul. Privind meminfo, parametrul dirty_background_ratio este calculat din valoare MemFree + Cached - Cartografiat. Deci, pentru sistemul nostru demo, 10% este puțin mai puțin de 250MB, dar nu 400MB.

Total: Când începe înregistrarea pdflush?

În configurația implicită, datele scrise pe disc rămân în memorie până când:

  • rămân în memorie mai mult de 30 de secunde;
  • paginile stocate în cache ocupă mai mult de 10% din memoria de lucru.

Dacă operațiunile de scriere au loc frecvent pe server, atunci într-o zi va fi atins parametrul dirty_background_ratio și veți putea vedea că toate scrierile pe disc trec doar prin acest parametru fără a aștepta expirarea parametrului dirty_expire_centiseconds.

Procesul de scriere a paginii

Parametru /proc/sys/vm/dirty_ratio(implicit 40): procentul maxim din RAM totală care poate fi alocată memoriei cache a paginii înainte ca pdflush să scrie date pe disc.

Nota: În timpul scrierii pe disc, toate procesele sunt blocate de la scriere, nu doar cel care a umplut tamponul de scriere. Acest lucru poate determina ca un proces să blocheze toate operațiunile I/O de pe sistem. Efectuați acest lucru

Recomandări pentru optimizarea Linux pentru operațiuni care necesită înregistrare frecventă

De obicei, oamenii care încearcă să mărească performanța subsistemului de disc se confruntă cu problema că Linux memorează prea multe informații simultan. Acest lucru este deosebit de dificil pentru operațiunile care necesită sincronizarea sistemului de fișiere folosind apeluri fsync. Dacă în timpul unui astfel de apel există o mulțime de date în cache, atunci sistemul se poate bloca până la încheierea acestui apel.
O altă problemă comună apare deoarece trebuie scris prea mult înainte de a începe scrierea pe discul fizic, operațiunile I/O apar mai frecvent decât operațiunile normale. Veți obține perioade mai lungi în care nu au loc scrieri pe disc până când memoria cache mare este plină, moment în care unul dintre declanșatoarele pdflush se va declanșa și datele vor fi scrise la viteza maximă.

raportul_fond_murdar: Instrumentul principal de reglare, de obicei reduce acest parametru. Dacă obiectivul dvs. este să reduceți cantitatea de date stocate în cache, astfel încât datele să fie scrise pe disc treptat și nu toate odată, atunci reducerea acestui parametru este cea mai eficientă modalitate. Valoarea implicită este mai acceptabilă pentru sistemele cu multă memorie RAM și discuri lente.

raportul_murdar: Al doilea cel mai important parametru de configurat. Dacă această setare este redusă semnificativ, aplicațiile care trebuie să scrie pe disc vor fi blocate împreună.

dirty_expire_centisecs: Încercați să o reduceți, dar nu mult. Vă permite să reduceți timpul petrecut paginile în cache înainte de a fi scrise pe disc, dar acest lucru va reduce semnificativ viteza medie de scriere pe disc, deoarece este mai putin eficient. Acest lucru va fi vizibil mai ales pe sistemele cu discuri lente.

Instrucțiuni pentru setarea parametrilor

În dosar /etc/sysctl.conf Introducem, de exemplu:

Vm.dirty_background_ratio = 10 vm.dirty_ratio = 40

Apoi sincronizăm memoria cache și datele de pe disc, ștergem memoria cache și salvăm setările.

Sincronizare; echo 3 > /proc/sys/vm/drop_caches; sysctl -p

Când vine vorba de optimizarea performanței sisteme Linux, memoria fizică este cel mai important factor. Desigur, Linux oferă multe opțiuni pentru a controla utilizarea resurselor de memorie prețioase. Diferitele instrumente variază în ceea ce privește granularitatea de monitorizare (de exemplu, la nivelul întregului sistem, per proces, per utilizator), interfață (de exemplu, grafică, linie de comandă, ncurses) sau modul de operare (de exemplu, interactiv, modul lot).

Iată o listă parțială de programe cu interfata grafica sau linia de comandă, astfel încât să aveți multe din care să alegeți pentru a verifica memoria folosită și liberă pe platformele Linux.

1. /proc/meminfo

Cel mai simplu mod de a verifica utilizarea RAM este prin /proc/meminfo. Acest fișier virtual actualizat dinamic este de fapt sursa de informații de afișare pentru multe alte instrumente legate de memorie, cum ar fi instrumentele gratuite, top și ps. Din cantitatea disponibila/ memorie fizică la cantitatea de buffer care se așteaptă să fie scrisă înapoi pe disc, /proc/meminfo are tot ce doriți să știți despre utilizare memorie de sistem. Informațiile despre memoria procesului sunt disponibile și din /proc/ /statm și /proc/ /status

$ cat /proc/meminfo

2. deasupra

Comanda atop este un sistem interactiv bazat pe ncurses și un observator de proces pentru mediul terminal. Afișează informații rezumate actualizate dinamic despre sursele de sistem (CPU, memorie, rețea, I/O, nucleu) cu avertismente codificate cu culori în cazul în care sarcină mare sisteme. De asemenea, poate sorta procesele (sau utilizatorii) în ordinea celui mai mare consum de resurse, astfel încât administrator de sistem poate spune ce proces sau utilizator este responsabil pentru pornirea sistemului. Rapoartele cu statistici de memorie includ memorie totală/liberă, memorie cache/bufferă și informații despre memorie. memorie virtuală.

$ sudo deasupra

3.gratuit

Comanda gratuită este o modalitate rapidă și ușoară de a obține o imagine de ansamblu asupra utilizării memoriei, obținută din /proc/meminfo. Afișează un instantaneu al memoriei fizice totale/disponibile și al schimbului de sistem, precum și al spațiului tampon utilizat/liber din nucleu.

4. Monitor de sistem GNOME

Monitorul de sistem GNOME este aplicație grafică care se arată o scurtă istorie utilizare resurse de sistem pentru CPU, memorie, spațiu de schimb și rețea. De asemenea, oferă un proces de monitorizare pentru utilizarea CPU și a memoriei.

$gnome-system-monitor

5.htop

Comanda htop este un vizualizator de proces interactiv bazat pe ncurses, care arată utilizarea memoriei de către proces în timp real. Poate raporta amprenta de memorie a procesului în memoria principală (RSS), dimensiunea totală a programului în memorie, dimensiunea bibliotecii, dimensiunea totală a paginii și dimensiunea paginii murdare (în cache) pentru toate procesele care rulează. Puteți derula orizontal sau vertical prin lista (sortată) a tuturor proceselor.

6. Monitor de sistem KDE

În timp ce desktopul GNOME are GNOME System Monitor, desktop-ul KDE are propriul său omolog: KDE System Monitor. Funcționalitatea sa este în principal similară cu versiunea GNOME, adică arată istoricul în timp real al utilizării resurselor sistemului, precum și consumul CPU/memorie al proceselor individuale.

$ksysguard

7. memstat

Utilitarul memstat este util pentru identificarea proceselor executabile și a bibliotecilor partajate care consumă memorie virtuală. Obținând ID-ul procesului, memstat dezvăluie câtă memorie virtuală este utilizată de codul executabil, datele și bibliotecile partajate asociate procesului respectiv.

$ memstat -p

8.nmon

Utilitarul nmon este un instrument de referință de sistem bazat pe ncurses care monitorizează procesorul, memoria, I/O disc, nucleul, sistem de fișiereși surse online. Pe baza utilizării memoriei, poate afișa informații cum ar fi memoria totală/liberă, spațiu de swap, memorie tampon/cache, statisticile memoriei virtuale încărcate/descărcate, toate în timp real.

9.ps

Comanda ps poate arăta utilizarea memoriei proceselor individuale în timp real. Informațiile de utilizare a memoriei afișate includ %MEM (procentul de memorie fizică utilizată), VSZ (cantitatea totală de memorie virtuală utilizată) și RSS (cantitatea totală de memorie fizică utilizată). Puteți sorta lista de procese folosind opțiunea „–sort”. De exemplu, pentru a sorta în ordine descendentă RSS:

$ ps aux --sort -rss

10. smem

Comanda smem vă permite să măsurați utilizarea memoriei fizice a diferitelor procese și utilizatori pe baza informațiilor disponibile din /proc. Acest utilitar folosește metrica Proportional Set Size (PSS) pentru a estima cu exactitate utilizarea efectivă a memoriei proceselor Linux. Analiza utilizării memoriei poate fi exportată în diagrame grafice cu bare și secțiuni.

$ sudo smem --pie name -c "pss"

11.sus

Comanda de sus oferă monitorizare în timp real a proceselor care rulează, împreună cu diverse statistici despre proces privind utilizarea resurselor. Informațiile legate de memorie includ %MEM (procentul de memorie utilizată), VIRT (cantitatea totală de memorie virtuală utilizată), SWAP (cantitatea de memorie virtuală schimbată), CODE (cantitatea de memorie fizică alocată pentru executarea codului), DATE (cantitatea de memorie fizică memorie alocată pentru neexecuție). -datele executabile), RES (cantitatea totală de memorie fizică utilizată, COD+DATE) și SHR (cantitatea de memorie potențial partajată cu alte procese). Puteți sorta lista de procese în funcție de utilizarea sau dimensiunea memoriei.

12.vmstat

Utilitarul de linie de comandă vmstat afișează statistici imediate și medii pentru diferite activități ale sistemului, inclusiv CPU, memorie, întreruperi și I/O pe disc. Ca sursă de informații despre memorie, această comandă arată nu numai utilizarea memoriei fizice (de exemplu, memorie totală/utilizată și memorie tampon/cache), ci și statistici de memorie virtuală (de exemplu, pagini încărcate/memorie paginată, paginată/încărcată).

Utilitarul de linie de comandă vmstat afișează statistici instantanee și medii ale diferitelor activități ale sistemului care acoperă CPU, memorie, întreruperi, și disc I/O. În ceea ce privește informațiile despre memorie, comanda arată nu numai utilizarea memoriei fizice (de exemplu, memorie totală/utilizată și memorie tampon/cache), ci și statistici de memorie virtuală (de exemplu, memorie paginată in/out, schimbată în/out).

$ vmstat -s

© 2024 ermake.ru -- Despre repararea PC-ului - Portal de informații