09.10.2021

Yükləmə üçün Linux -un optimallaşdırılması. Disk yazma önbelleği. Linux Səhifə Yazma Prosesində Swappiness və Caching -in Konfiqurasiyası


RAM və dəyişdirmə (dəyişdirmə bölməsi) istifadəsi ilə əlaqədar Ubuntu davranışını dəyişdirək. Vm.swappiness kimi bir parametr var, bu dəyər 60 -a bərabərdir və səhifələrin dəyişdirmə hissəsinə aktiv axınının başlayacağı boş yaddaşın faizini nəzarət edir. Başqa sözlə, tutulan yaddaşın 100-60 = 40% -i olduqda, Ubuntu artıq dəyişdirmə hissəsini istifadə etməyə başlayacaq. Kompüterdə çoxlu RAM varsa, vm.swappiness parametrini 10-a dəyişmək və Ubuntu-ya bildirmək daha yaxşıdır ki, işğal olunmuş RAM 100-10 = 90%-ə çatana qədər svopdan istifadə etməsin. Dəyəri 60 yerinə 10 olaraq təyin edin. Konsolda aşağıdakı əmri daxil edin:

Echo 10> / proc / sys / vm / swappiness

Sysctl -w vm.swappiness = 10

Yenidən başladıqdan sonra konfiqurasiyanızı saxlamaq üçün /etc/sysctl.conf sonuna aşağıdakı sətri əlavə edin:

Vm. Xoşbəxtlik = 10

Ayarı dərhal tətbiq etmək üçün:

Sysctl -p

Əlavə olaraq daha bir neçə parametr söyləmək olar.
Yalançı fayl vfs_cache_pressure bir dəyəri - önbellek üçün ayrılmış yaddaş səviyyəsini saxlayır. Varsayılan dəyər: 100. Bu parametrin artırılması, nüvəni istifadə edilməmiş yaddaş səhifələrini önbellekten aktiv şəkildə boşaltmağa məcbur edir, yəni. önbellek üçün ayrılan RAM miqdarı daha yavaş artacaq və bu da dəyişdirmə hissəsinin istifadə olunma ehtimalını azaldacaq. Bu parametri azaldaraq, kernel, əksinə, dəyişdirmə də daxil olmaqla yaddaş səhifələrini yaddaşda daha uzun müddət saxlayacaq.Bu, az miqdarda RAM ilə, məsələn, 512 MB yaddaşımız varsa, vfs_cache_pressure parametridir. Bu, dəyişdirmə bölməsindəki disk əməliyyatlarının sayını azaldacaq, buna görə istifadə olunmamış səhifələr daha az silinəcək və bu parametrin daha da azalması yaddaşın tükənməsinə səbəb ola bilər.
Sistemi sürətləndirmək istəyirsinizsə və kifayət qədər RAM (2 GB və ya daha çox) varsa, sistem dəyərini dəyişdirin: swappiness = 10, vfs_cache_pressure = 1000 (default 100), /etc /sysctl -ə aşağıdakı sətri əlavə edin. .conf faylı:

Vm.vfs_cache_pressure = 1000

ya da tezliklə:

Sysctl -w vm.vfs_cache_pressure = 1000

Linux önbelleği

Diskə məlumat yazarkən (hər hansı bir proqramla) Linux bu məlumatı Page Cache adlı bir yaddaş sahəsində önbelleğe alır. Bu yaddaş sahəsi haqqında məlumatlara pulsuz, vmstat və ya üst əmrlərdən istifadə etməklə baxmaq olar. Bu yaddaş sahəsi haqqında tam məlumatı / proc / meminfo faylında tapa bilərsiniz. Aşağıda 4 GB RAM ilə bir serverdə bu faylın bir nümunəsi verilmişdir:

Ümumi yaddaş: 3950112 kB
Yaddaş pulsuz: 622560 kB
Tamponlar: 78048 kB
Önbelleğe alınmış: 2901484 kB
SwapCached: 0 kB
Aktiv: 3108012 kB
Aktiv deyil: 55296 kB
Yüksək Ümumi: 0 kB
Yüksək Sərbəst: 0 kB
Aşağı Ümumi: 3950112 kB
Aşağı Sərbəst: 622560 kB
Ümumi dəyişdirmə: 4198272 kB
Mübadilə Pulsuz: 4198244 kB
Çirkli: 416 kB
Geri yazma: 0 kB
Xəritə: 999852 kB
Döşəmə: 57104 kB
Verilən_AS: 3340368 kB
Səhifə masaları: 6672 kB
Vmalloc Cəmi: 536870911 kB
Vmalloc İstifadə: 35300 kB
VmallocChunk: 536835611 kB
HugePages_Total: 0
HugePages_Free: 0
Səhifə ölçüsü: 2048 kB

Səhifə Önbelleği ölçüsü "Önbelleğe alınmış" parametrində göstərilir, bu nümunədə 2.9 GB -dır. Səhifələr yaddaşa yazıldıqda, Çirkli parametrin ölçüsü böyüyür. Diskə yazmağa başladığınız zaman, yazma bitənə qədər "Geri yaz" parametri artacaq. "Geri yazma" parametrini yüksək görmək çətindir, çünki I / O əməliyyatları sıraya qoyulduqda ancaq hələ diskə yazılmadıqda yoxlama zamanı artır.
Linux adətən pdflush prosesindən istifadə edərək məlumatları önbellektən diskə yazır. İstənilən vaxt sistemdə 2 -dən 8 -ə qədər pdflush mövzu işləyir. / Proc / sys / vm / nr_pdflush_threads faylında hazırda neçə mövzu işlədiyini görə bilərsiniz. Hər dəfə bütün mövcud pdflush mövzuları ən az 1 saniyə məşğul olur. Yeni iş parçaları, cihazların pulsuz növbələrinə məlumat yazmağa çalışır, belə ki, hər bir aktiv cihaz üçün önbellekdən 1 ədəd məlumat yuyulur. Hər saniyə pdflush tərəfdən heç bir hərəkət etmədən keçəndə 1 mövzu çıxarılır. Linux -da minimum və maksimum pdflush mövzularını konfiqurasiya edə bilərsiniz.

Pdflush qurulur
Hər bir pdflush axını / proc / sys / vm -də bir neçə variantla idarə olunur:

  • / proc / sys / vm / dirty_writeback_centisecs (standart 500): saniyənin yüzdə birində. Bu parametr, pdflush -un diskə məlumat yazmaq üçün nə qədər tez başladığını göstərir. Varsayılan olaraq, hər 5 saniyədə 2 mövzu davam edir.
    Pdflush prosesi ilə daha aqressiv məlumatların önbelleğe alınması üçün kirli_yazma_saytlarının azaldılması cəhdlərinin qarşısını alan sənədsiz davranış. Məsələn, mm / page-writeback.c faylında 2.6 Linux nüvəsinin erkən versiyalarında, koda "diske yazmaq kirli_writeback_centisecs-dən daha uzun sürərsə, aralığı 1 saniyəyə təyin etməlisiniz" izah edən məntiq var idi. Bu məntiq yalnız kernel kodunda təsvir edilmişdir və onun funksionallığı Linux kernel versiyasından asılıdır. Bu çox yaxşı olmadığı üçün bu parametri azaltmaqdan qorunacaqsınız.
  • kod> / proc / sys / vm / dirty_expire_centiseconds (standart 3000): saniyənin yüzdə birində. Bu parametr, məlumatların önbellekte nə qədər uzun ola biləcəyini, bundan sonra diskə yazılmalı olduğunu göstərir. Varsayılan çox uzundur: 30 saniyə. Bu o deməkdir ki, normal işlədikdə, başqa bir pdflush metodunu çağırmaq üçün önbelleğe kifayət qədər məlumat yazılana qədər, Linux 30 saniyədən az müddətdə önbellekte olan diskə məlumat yazmayacaq.
  • / proc / sys / vm / dirty_background_ratio (default 10): Səhifə önbelleğinin məlumatları diskə yazmadan əvvəl doldura biləcəyi RAM -ın maksimum faizi. Bəzi Linux kernel versiyaları bu parametri 5%olaraq təyin edə bilər.
    Əksər sənədlər bu parametri ümumi RAM -ın faizi kimi təsvir edir, lakin Linux kernel mənbələrinə görə, bu belə deyil. Meminfo -ya baxaraq, kirli_arxa_sayı MemFree + Önbelleğe alınmış - Mapped -dən hesablanır. Buna görə də, demo sistemimiz üçün 10% 250MB -dən bir qədər azdır, lakin 400MB deyil.

Pdflush yazmağa nə vaxt başlayır?
Varsayılan konfiqurasiyada, diskə yazılan məlumatlar yadda saxlanılır:

Serverdə tez -tez yazılar varsa, o zaman bir gün бохир_arxa_ratio parametrinə çatılacaq və görürsən ki, bütün disk yazmaları kirli_ekstir_centiseconds parametrinin bitməsini gözləmədən yalnız bu parametrdən keçir.

Səhifə yazma prosesi
/ Proc / sys / vm / dirty_ratio (standart 40), pdflushun diskə məlumat yazmasından əvvəl səhifə önbelleği üçün ayrılan ümumi RAM -ın maksimum faizidir.

Qeyd: Diskə yazarkən, yalnız yazmaq üçün buferi dolduran deyil, bütün proseslər yazmaq üçün bloklanır. Bu, bir prosesin sistemdəki bütün G / Ç əməliyyatlarını bloklamasına səbəb ola bilər.

Tez -tez Yazma Əməliyyatları üçün Linux Optimizasiya Məsləhətləri
Ümumiyyətlə, disk alt sisteminin performansını artırmağa çalışarkən, Linux -un bir anda çox məlumat tamponlaması problemi ilə üzləşirlər. Bu, xüsusilə fsync zənglərindən istifadə edərək fayl sisteminin sinxronizasiyasını tələb edən əməliyyatlar üçün nəzərə çarpır. Belə bir zəng zamanı önbellekte çoxlu məlumat varsa, bu zəng bitənə qədər sistem "asa" bilər.
Başqa bir ümumi problem, fiziki diske yazılmadan əvvəl çox yazılmalı olduğu üçün G / Ç əməliyyatları normal əməliyyatla müqayisədə daha tez -tez baş verir.

  • dirty_background_ratio: Əsas konfiqurasiya vasitəsidir. Adətən bu parametr azalır. Məqsədiniz, önbellekte saxlanılan məlumatların miqdarını azaltmaqdırsa, məlumatların bir anda deyil, tədricən diske yazılması üçün bu parametri azaltmaq ən təsirli yoldur. Varsayılan dəyər, çoxlu RAM və yavaş diskləri olan sistemlər üçün ən uyğundur.
  • dirty_ratio: Konfiqurasiya edilməli olan ikinci ən vacib parametr. Bu parametr əhəmiyyətli dərəcədə azaldılsa, diske yazmalı olan tətbiqlərin hamısı birlikdə bloklanacaq.
  • dirty_expire_centisecs: Bu parametri azaltmağa çalışın, amma çox deyil. Səhifələrin diske yazmadan əvvəl önbellekte qalma müddətini azaltmağa imkan verir, lakin digər tərəfdən, diskə yazma sürətini əhəmiyyətli dərəcədə azaldacaq ki, bu da yavaş diskləri olan sistemlərdə xüsusilə nəzərə çarpacaq.

Nəticədə əldə edirik
/Etc/sysctl.conf faylına əlavə edin:

Vm.dirty_background_ratio = 10 vm.dirty_ratio = 40

Sonra önbelleğin və diskin məlumatlarını sinxronlaşdırırıq, önbelleği təmizləyirik və parametrləri saxlayırıq:

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

Diskdə qeydlərin sona çatma sayını azaltmaq üçün tənzimləməlisiniz:

Vm.dirty_writeback_centisecs = 15000

Hər hansı digər əməliyyat sistemi kimi, Linux da RAM ilə çox səmərəlidir. Mövcud yaddaş proseslər arasında sərbəst şəkildə paylanır, istifadə olunmamış səhifələr diskdəki dəyişdirmə hissəsinə tökülür və yaddaşın daşması halında, bütün prosesləri təhlil edən və günahkarı məhv edən xüsusi bir mexanizm işə salınır.

Hər hansı bir proses diskə məlumat yazdıqda, nüvə onu ayrı bir önbellekdə saxlayır. Çox vaxt bu önbellek çox yer tutur. Bu yazıda Linux -da yaddaşın necə boşaldılacağına, daha doğrusu, proqramlar tərəfindən yaradılan önbelleğin necə təmizlənəcəyinə baxacağıq.

Hər Linux paylamasında, linux yaddaş önbelleğini təmizləmək üçün üç əmrdən istifadə etmək olar. Və heç bir prosesə son qoymaq məcburiyyətində deyilik. Bu əmrlər bunlardır:

PageCache təmizlənməsi:

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

İnod və diş dişlərinin təmizlənməsi:

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

Inode və dentrie və PageCache təmizlənməsi:

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

Bu əmrlərdən birini yerinə yetirməzdən əvvəl çalıştırın:

Bunun səbəbi, hər bir əmrin işləməsi üçün super istifadəçi hüquqları tələb edir. İndi bu əmrlər icra edildikdə nələrin baş verdiyinə nəzər salaq.

Sinxronizasiya proqramı sistemi bütün önbelleğe alınmış, lakin hələ yazılmamış məlumatları diske yazmağa məcbur edir. Bu, mümkün qədər çox yaddaşı boşaltmaq üçündür. Varsayılan olaraq, məlumatlar diskə yazıldıqdan sonra önbellekten silinmir, bu lazım olduqda proqramın daha sürətli oxuya bilməsi üçün lazımdır.

Sinxronizasiya əmrini yerinə yetirməsək, bir az yer də boşaldarıq, amma icra etdikdən sonra nəticə daha yaxşı olacaq.

Ayrılıq simvolu; qabığa başqa bir əmri yerinə yetirməzdən əvvəl ilk əmrin tamamlanmasını gözləməsini bildirir. Son əmr echo 1> / proc / sys / vm / drop_caches 1 dəyərini / proc / sys / vm / drop_caches faylına yazır. Bu, kernelə seçdiyimiz önbelleği təmizləmək üçün siqnal verir.

Linux önbellek növləri

İndi bu əmrləri silməyə imkan verən önbellek növlərinə və bunların hamısının necə işlədiyinə nəzər salaq.

PageCache və ya səhifə önbelleği, nüvənin diskdən yazdığınız və ya oxuduğunuz bütün məlumatları saxladığı yerdir. Bu, sistemin işini çox sürətləndirir, çünki proqram eyni məlumatlara ikinci dəfə ehtiyac duyarsa, sadəcə olaraq RAM -dan alınacaq. Ancaq bu səbəbdən bu önbellek ən çox yer tutur.

Səhifə önbelleğinin ölçüsünü pulsuz yardım proqramından istifadə edərək görə bilərsiniz. Burada son sütunda göstərilir - önbelleğe alınmışdır:

Belə bir önbelleği təmizləmək ən səmərəli və ən təhlükəsizdir.

Inode və dentrie önbelleği fayl sisteminə də aiddir. Yalnız məlumatların özü yazılmır, ancaq fayl sisteminin quruluşu, fayl və qovluqların yeri. Bir faylın yerini və ya bir qovluğun məzmununu istəyərkən, kernel bütün bu məlumatları ehtiva edən xüsusi quruluşlar yaradır. Növbəti istəklə, strukturlar artıq yaddaşda saxlanılacaq. Hər bir fayl sisteminin öz inode önbelleği və ortaq bir diş önbelleği var.

Bu önbellek çox az yaddaş tutur. Məlumatlar bayt şəklində təqdim olunur və gördüyünüz kimi bu çox kiçikdir. Komanda ilə baxa bilərsiniz:

cat / proc / slabinfo | egrep diş müalicəsi \ | inode

Linux yaddaşını boşaltmaq üçün onu təmizləmək məsləhət görülmür, çünki az yaddaş sərf olunur və fayl sisteminin yeni taranması nisbətən uzun müddət çəkir.

Önbelleği ümumiyyətlə təmizləməyim lazımdırmı?

Birincisi, çoxlu yaddaş istifadə olunursa, xüsusən də çoxlu yaddaş tutarsa, səhifənin önbelleğini təmizləyə bilərsiniz. İkincisi, fayl sisteminin və ya nüvənin hər hansı bir parametrini dəyişdirmisinizsə və indi bunun oxumaq / yazma əməliyyatlarının sürətinə necə təsir etdiyini yoxlamaq istəsəniz linux yaddaş önbelleğini təmizləməyiniz lazım ola bilər. Bu vəziyyətdə, bütün önbellekleri təmizləyə və yenidən başlamadan edə bilərsiniz, bu çox əlverişlidir.

Linux əməliyyat sistemi elə qurulmuşdur ki, diskinə daxil olmamışdan əvvəl disk önbelleğine baxılacaq və lazımi məlumatlar varsa diskə giriş olmayacaq. Linux önbelleğini təmizləsəniz, əməliyyat sistemi diskdəki məlumatları axtarmalı olduğu üçün bir qədər yavaş işləyəcək.

Avtomatik önbelleğin təmizlənməsi

Cron iş planlayıcısından istifadə edərək hər gün saat 2 -də yaddaş önbelleğini avtomatik olaraq necə təmizləyəcəyimizi nəzərdən keçirək.

Əvvəlcə aşağıdakı məzmunlu bir bash skriptini yaradaq:

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

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

Yalnız səhifənin önbelleğini təmizləyəcəyik, çünki ən çox istifadə edir. Sistemin performansını boş yerə azaltmamaq üçün digər növlərə toxunmayacağıq.

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

Vəzifəni cron planlayıcısına əlavə etmək qalır. Bunu etmək üçün əmri işlədin:

Və açılan redaktora sətir əlavə edin:

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

Bu skript indi hər gecə işləyəcək və server normal işləyə bilməsi üçün yaddaşı təmizləyəcək.

Yaddaş önbelleğinin ölçüsünün tənzimlənməsi

Hər dəfə önbelleği təmizləmək deyil, sistemin özü lazımsız səhifələri sildiyi bir limit təyin etmək daha rahatdır. Bir sistemin önbellek üçün neçə meqabayt istifadə edə biləcəyini açıq şəkildə məhdudlaşdıra bilməzsiniz. Mövcud olan bütün yaddaş lazım olduğu kimi istifadə ediləcək, ancaq müddəti bitmiş səhifələrin önbellekten silinmə sürətini tənzimləyə bilərsiniz.

/ Proc / sys / vm / vfs_cache_pressure faylı bundan məsuldur. Səhifələrin önbellekten necə aqressiv şəkildə çıxarılacağına dair nisbi bir ölçü var. Varsayılan olaraq, parametr 100 olaraq təyin olunur. Əgər onu azaltsanız, kernel səhifələri daha az siləcək və bu, önbelleğin çox sürətlə artmasına səbəb olacaq. Sıfırda səhifələr ümumiyyətlə silinməyəcək. Dəyər 100 -dən çox olarsa, önbellek daha yavaş böyüyəcək və istifadə olunmamış səhifələr dərhal silinəcəkdir.

Məsələn, minimum önbellek ölçüsünü edək:

echo 1000> / proc / sys / vm / vfs_cache_pressure

Unutmayın ki, bu sisteminizin performansını kəskin şəkildə azaldacaq, çünki önbellek əvəzinə məlumatlar diskdən oxunacaq.

Mübadilə yaddaşını necə təmizləmək olar

Məkanı təmizləmək çox asandır. Bunu etmək üçün çalıştırın:

swapoff -a && swapon -a

Unutmayın ki, dəyişdirmə zamanı bütün məlumatlar yenidən RAM -a köçürüləcəkdir.

nəticələr

Hamısı budur. Artıq Linux önbelleğini və boş yaddaşı təmizləməyi bilirsiniz. Unutmayın ki, bu məqalədə verilən bütün əmrlər super istifadəçi adından icra edilməlidir, əks halda heç bir şey işləməyəcəkdir. Hər hansı bir sualınız varsa, şərhlərdə soruşun!

Əlaqəli girişlər:


Hər hansı digər əməliyyat sistemi kimi, Linux da RAM ilə çox səmərəlidir. Mövcud yaddaş proseslər arasında sərbəst şəkildə paylanır, istifadə olunmamış səhifələr diskdəki dəyişdirmə hissəsinə tökülür və yaddaşın daşması halında, bütün prosesləri təhlil edən və günahkarı məhv edən xüsusi bir mexanizm işə salınır.

Hər hansı bir proses diskə məlumat yazdıqda, nüvə onu ayrı bir önbellekdə saxlayır. Çox vaxt bu önbellek çox yer tutur.

Xatirəni LINUX -da NECƏ QALDIRACAQ
Hər Linux paylamasında, linux yaddaş önbelleğini təmizləmək üçün üç əmrdən istifadə etmək olar. Və heç bir prosesə son qoymaq məcburiyyətində deyilik. Bu əmrlər bunlardır:

PageCache təmizlənməsi:

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

İnod və diş dişlərinin təmizlənməsi:

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

Inode və dentrie və PageCache təmizlənməsi:

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

Bu əmrlərdən birini yerinə yetirməzdən əvvəl çalıştırın:

Bunun səbəbi, hər bir əmrin işləməsi üçün super istifadəçi hüquqları tələb edir. İndi bu əmrlər icra edildikdə nələrin baş verdiyinə nəzər salaq.

Sinxronizasiya proqramı sistemi bütün önbelleğe alınmış, lakin hələ yazılmamış məlumatları diske yazmağa məcbur edir. Bu, mümkün qədər çox yaddaşı boşaltmaq üçündür. Varsayılan olaraq, məlumatlar diskə yazıldıqdan sonra önbellekten silinmir, bu lazım olduqda proqramın daha sürətli oxuya bilməsi üçün lazımdır.

Sinxronizasiya əmrini yerinə yetirməsək, bir az yer də boşaldarıq, amma icra etdikdən sonra nəticə daha yaxşı olacaq.

Ayrılıq simvolu; qabığa başqa bir əmri yerinə yetirməzdən əvvəl ilk əmrin tamamlanmasını gözləməsini bildirir. Son əmr echo 1> / proc / sys / vm / drop_caches 1 dəyərini / proc / sys / vm / drop_caches faylına yazır. Bu, kernelə seçdiyimiz önbelleği təmizləmək üçün siqnal verir.

LINUX CACHE NÖVLƏRİ
İndi bu əmrləri silməyə imkan verən önbellek növlərinə və bunların hamısının necə işlədiyinə nəzər salaq.

PageCache və ya səhifə önbelleği, nüvənin diskdən yazdığınız və ya oxuduğunuz bütün məlumatları saxladığı yerdir. Bu, sistemin işini çox sürətləndirir, çünki proqram eyni məlumatlara ikinci dəfə ehtiyac duyarsa, sadəcə olaraq RAM -dan alınacaq. Ancaq bu səbəbdən bu önbellek ən çox yer tutur.

Səhifə önbelleğinin ölçüsünü pulsuz yardım proqramından istifadə edərək görə bilərsiniz. Burada son sütunda göstərilir - önbelleğe alınmışdır:

Belə bir önbelleği təmizləmək ən səmərəli və ən təhlükəsizdir.

Inode və dentrie önbelleği fayl sisteminə də aiddir. Yalnız məlumatların özü yazılmır, ancaq fayl sisteminin quruluşu, fayl və qovluqların yeri. Bir faylın yerini və ya bir qovluğun məzmununu istəyərkən, kernel bütün bu məlumatları ehtiva edən xüsusi quruluşlar yaradır. Növbəti istəklə, strukturlar artıq yaddaşda saxlanılacaq. Hər bir fayl sisteminin öz inode önbelleği və ortaq bir diş önbelleği var.

Bu önbellek çox az yaddaş tutur. Məlumatlar bayt şəklində təqdim olunur və gördüyünüz kimi bu çox kiçikdir. Komanda ilə baxa bilərsiniz:

Cat / proc / slabinfo | egrep diş müalicəsi \ | inode


Linux yaddaşını boşaltmaq üçün onu təmizləmək məsləhət görülmür, çünki az yaddaş sərf olunur və fayl sisteminin yeni taranması nisbətən uzun müddət çəkir.

ÖMÜRÜ TAMAMEN TEMİZLƏMƏYƏ GERƏMİZ?
Birincisi, çoxlu yaddaş istifadə olunursa, xüsusən də çoxlu yaddaş tutarsa, səhifənin önbelleğini təmizləyə bilərsiniz. İkincisi, fayl sisteminin və ya nüvənin hər hansı bir parametrini dəyişdirmisinizsə və indi bunun oxumaq / yazma sürətinə necə təsir etdiyini yoxlamaq istəsəniz linux yaddaş önbelleğini təmizləməyiniz lazım ola bilər. Bu vəziyyətdə, bütün önbellekleri təmizləyə və yenidən başlamadan edə bilərsiniz, bu çox əlverişlidir.

Linux əməliyyat sistemi elə qurulmuşdur ki, diskinə daxil olmamışdan əvvəl disk önbelleğine baxılacaq və lazımi məlumatlar varsa diskə giriş olmayacaq. Linux önbelleğini təmizləsəniz, əməliyyat sistemi diskdəki məlumatları axtarmalı olduğu üçün bir qədər yavaş işləyəcək.

OTOMATİK TEMİZLİK CACHE
Cron iş planlayıcısından istifadə edərək hər gün saat 2 -də yaddaş önbelleğini avtomatik olaraq necə təmizləyəcəyimizi nəzərdən keçirək.

Əvvəlcə aşağıdakı məzmunlu bir bash skriptini yaradaq:

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

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

Yalnız səhifənin önbelleğini təmizləyəcəyik, çünki ən çox istifadə edir. Sistemin performansını boş yerə azaltmamaq üçün digər növlərə toxunmayacağıq.

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

Vəzifəni cron planlayıcısına əlavə etmək qalır. Bunu etmək üçün əmri işlədin:

Sudo crontab -e

Və açılan redaktora sətir əlavə edin:

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

Bu skript indi hər gecə işləyəcək və server normal işləyə bilməsi üçün yaddaşı təmizləyəcək.

YADDAŞ ÖNCƏSİNİN BOYUNUN AYARLANMASI
Hər dəfə önbelleği təmizləmək deyil, sistemin özü lazımsız səhifələri sildiyi bir limit təyin etmək daha rahatdır. Bir sistemin önbellek üçün neçə meqabayt istifadə edə biləcəyini açıq şəkildə məhdudlaşdıra bilməzsiniz. Mövcud olan bütün yaddaş lazım olduğu kimi istifadə ediləcək, ancaq müddəti bitmiş səhifələrin önbellekten silinmə sürətini tənzimləyə bilərsiniz.

/ Proc / sys / vm / vfs_cache_pressure faylı bundan məsuldur. Səhifələrin önbellekten necə aqressiv şəkildə çıxarılacağına dair nisbi bir ölçü var. Varsayılan olaraq, parametr 100 olaraq təyin olunur. Əgər onu azaltsanız, kernel səhifələri daha az siləcək və bu, önbelleğin çox sürətlə artmasına səbəb olacaq. Sıfırda səhifələr ümumiyyətlə silinməyəcək. Dəyər 100 -dən çox olarsa, önbellek daha yavaş böyüyəcək və istifadə olunmamış səhifələr dərhal silinəcəkdir.

Məsələn, minimum önbellek ölçüsünü edək:

Echo 1000> / proc / sys / vm / vfs_cache_pressure

Unutmayın ki, bu sisteminizin performansını kəskin şəkildə azaldacaq, çünki önbellek əvəzinə məlumatlar diskdən oxunacaq.

SWAP YADDASINI NECƏ TƏMİZLƏYƏCƏK
Məkanı təmizləmək çox asandır. Bunu etmək üçün çalıştırın:

Swapoff -a && swapon -a

Unutmayın ki, dəyişdirmə zamanı bütün məlumatlar yenidən RAM -a köçürüləcəkdir.

NƏTİCƏLƏR
Hamısı budur. Artıq Linux önbelleğini və boş yaddaşı təmizləməyi bilirsiniz.Bütün əmrlər super istifadəçi olaraq icra edilməlidir, əks halda heç bir şey işləməyəcək.

Bu yaxınlarda, virtual serverlərdən birində diskə uzun müddət yazmaq problemi ilə qarşılaşdım. Bu mövzu altında, Linux -da diskdə yazma əməliyyatlarının önbelleğe alınmasının işləməsi məsələsinin ətraflı şəkildə nəzərdən keçirildiyi maraqlı bir mövzu tapdım. Bu gün bu yazının tərcüməsi olacaq.

Linux önbelleği

Diskə məlumat yazarkən (hər hansı bir proqramla) Linux bu məlumatı Page Cache adlı bir yaddaş sahəsində önbelleğe alır. Bu yaddaş sahəsi haqqında məlumatı əmrlərdən istifadə etməklə görə bilərsiniz Pulsuz, vmstat və ya üst... Bu yaddaş sahəsi haqqında tam məlumatı faylda tapa bilərsiniz / proc / meminfo... Aşağıda 4 GB RAM ilə bir serverdə bu faylın bir nümunəsi verilmişdir:

Yaddaş Toplam: 3950112 kB MemFree: 622560 kB Tamponlar: 78048 kB Önbelleğe alınmış: 2901484 kB SwapCached: 0 kB Aktiv: 3108012 kB Aktiv olmayan: 55296 kB HighTotal: 0 kB HighFree: 0 kB LowTotal: 3950112 kB LowBreeBreeFBBBBBBBBF kB444BBFF244 kB 416 kB Geri Göndərmə: 0 kB Xəritələnmiş: 999852 kB Döşəmə: 57104 kB Verilmiş_AS: 3340368 kB Səhifə Masaları: 6672 kB Vmalloc Cəmi: 536870911 kB Vmalloc İstifadə Edilmiş: 35300 kB VmallocalChunkages: 536835611 kB Böyük Səhifələr

Səhifə Önbelleği ölçüsü "Önbelleğe alınmış" parametrində göstərilir, bu nümunədə 2.9 GB -dır. Səhifələr yaddaşa yazıldıqda, Çirkli parametrin ölçüsü böyüyür. Birbaşa diske yazmağa başladığınızda, yazma bitənə qədər "Geri yaz" parametri artacaq. "Geri yazma" parametrini yüksək görmək çətindir, çünki giriş / çıxış əməliyyatları sıraya qoyulduqda, lakin hələ diskə yazılmadıqda yoxlama zamanı artır.
Linux ümumiyyətlə bir prosesdən istifadə edərək məlumatları önbellekten diske yazır pdflush... İstənilən vaxt sistemdə 2 -dən 8 -ə qədər mövzu işləyir pdflush... Faylda / proc / sys / vm / nr_pdflush_threads hazırda neçə aktiv mövzu olduğunu görə bilərsiniz. Hər dəfə bütün mövcud pdflush mövzuları ən az 1 saniyə məşğul olur. Yeni iş parçaları, cihazların pulsuz növbələrinə məlumat yazmağa çalışır, belə ki, hər bir aktiv cihaz üçün önbellekdən 1 ədəd məlumat yuyulur. Hər dəfə pdflush tərəfdən heç bir hərəkət etmədən 1 ip çıxarılır. Linux -da minimum və maksimum pdflush mövzularını konfiqurasiya edə bilərsiniz.

Pdflush qurulur

Hər bir pdflush axını bir neçə parametrlə idarə olunur / proc / sys / vm:

  • / proc / sys / vm / dirty_writeback_centisecs(standart 500): saniyənin yüzdə birində. Bu parametr, pdflush -un diskə məlumat yazmaq üçün nə qədər tez başladığını göstərir. Varsayılan olaraq, hər 5 saniyədə 2 mövzu davam edir.
    Pdflush prosesi ilə daha aqressiv məlumatların önbelleğe alınması üçün kirli_yazma_saytlarının azaldılması cəhdlərinin qarşısını alan sənədsiz davranış. Məsələn, mm / page-writeback.c faylında 2.6 Linux nüvəsinin erkən versiyalarında, koda "diske yazmaq kirli_writeback_centisecs-dən daha uzun sürərsə, aralığı 1 saniyəyə təyin etməlisiniz" izah edən məntiq var idi. Bu məntiq yalnız kernel kodunda təsvir edilmişdir və onun funksionallığı Linux kernel versiyasından asılıdır. Bu çox yaxşı olmadığı üçün bu parametri azaltmaqdan qorunacaqsınız.
  • / proc / sys / vm / dirty_expire_centiseconds(standart 3000): saniyənin yüzdə birində. Bu parametr, məlumatların önbellekte nə qədər uzun olacağını, bundan sonra diskə yazılmalı olduğunu göstərir. Varsayılan çox uzundur: 30 saniyə. Bu o deməkdir ki, normal işlədikdə, başqa bir pdflush metodunu çağırmaq üçün önbelleğe kifayət qədər məlumat yazılana qədər, Linux 30 saniyədən az müddətdə önbellekte olan diskə məlumat yazmayacaq.
  • / proc / sys / vm / dirty_background_ratio(standart 10): Səhifə önbelleğinin məlumatları diskə yazmadan əvvəl doldura biləcəyi RAM -in maksimum faizi. Bəzi Linux kernel versiyaları bu parametri 5%olaraq təyin edə bilər.

    Əksər sənədlər bu parametri ümumi RAM -ın yüzdə kimi təsvir edir, lakin Linux kernel mənbələrinə görə, bu belə deyil. Meminfo -ya baxdıqda, kirli_arxa_sayısı parametri dəyərdən hesablanır MemFree + Önbelleğe alındı ​​- Xəritələndi... Buna görə də, demo sistemimiz üçün 10% 250MB -dən bir qədər azdır, lakin 400MB deyil.

Cəmi: pdflush yazmağa nə vaxt başlayır?

Varsayılan konfiqurasiyada diskə yazılan məlumatlar yaddaşda qalır:

  • yaddaşda 30 saniyədən çoxdur;
  • önbelleğe alınmış səhifələr, iş yaddaşının 10% -dən çoxunu tutur.

Serverdə tez -tez yazma əməliyyatları varsa, o zaman bir gün kirli_suranın_ratio parametrinə çatılacaq və görürsən ki, bütün disk yazmaları, kirli_ekstir_centiseconds parametrinin bitməsini gözləmədən yalnız bu parametrdən keçir.

Səhifə yazma prosesi

Parametr / proc / sys / vm / dirty_ratio(standart 40): pdflush -un diskə məlumat yazmasından əvvəl səhifə önbelleği üçün ayrılan ümumi RAM -ın maksimum faizi.

Qeyd: Diskə yazarkən, yalnız yazmaq üçün tamponu dolduran deyil, bütün proseslər yazmaq üçün bloklanır. Bu, bir prosesin sistemdəki bütün G / Ç əməliyyatlarını bloklamasına səbəb ola bilər. Bunu xərcləyin

Tez -tez Yazma Əməliyyatları üçün Linux Optimizasiya Məsləhətləri

Ümumiyyətlə, disk alt sisteminin performansını artırmağa çalışarkən insanlar Linux -un bir anda çox məlumat tamponlaması problemi ilə qarşılaşırlar. Bu, fsync zənglərindən istifadə edərək fayl sisteminin sinxronizasiyasını tələb edən əməliyyatlar üçün xüsusilə çətindir. Belə bir zəng zamanı önbellekte çoxlu məlumat varsa, bu zəng bitənə qədər sistem "asa" bilər.
Başqa bir ümumi problem, fiziki diske yazılmadan əvvəl çox yazılmalı olduğu üçün G / Ç əməliyyatları normal işləmə müddətindən daha tez -tez baş verir. Böyük önbellek dolana qədər diskə uzun müddət yazmayacaqsınız, bundan sonra pdflush -dan biri yanğınları tetikler və məlumatlar maksimum sürətlə yazılır.

çirkli_arxa_sayt: Əsas tənzimləmə vasitəsi, ümumiyyətlə bu parametri azaldır. Məqsədiniz, önbellekte saxlanılan məlumatların miqdarını azaltmaqdırsa, məlumatların bir anda deyil, tədricən diskə yazılması üçün bu parametri azaltmaq ən təsirli yoldur. Varsayılan dəyər, çoxlu RAM və yavaş diskləri olan sistemlər üçün daha məqbuldur.

kirli_sayt: Ayarlama üçün ikinci ən vacib parametr. Bu parametr əhəmiyyətli dərəcədə azaldılsa, diske yazmalı olan tətbiqlərin hamısı birlikdə bloklanacaq.

çirkli_dözmə_saytları: Azaltmağa çalışın, amma çox deyil. Diskə yazmadan əvvəl səhifələrin önbelleğe sərf olunan vaxtını azaltmağa imkan verir, ancaq bu, diskə yazmanın orta sürətini əhəmiyyətli dərəcədə azaldacaq. daha az səmərəlidir. Bu, yavaş diskləri olan sistemlərdə xüsusilə doğrudur.

Parametrləri təyin etmək üçün təlimatlar

Faylda /etc/sysctl.conf təqdim edirik, məsələn:

Vm.dirty_background_ratio = 10 vm.dirty_ratio = 40

Sonra önbelleğin və diskin məlumatlarını sinxronlaşdırırıq, önbelleği təmizləyirik və parametrləri saxlayırıq.

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

Linux -da demək olar ki, bütün əmrlər qrafik interfeysi yoxdur. Giriş serverlərində işləyərkən yalnız qabıq. Beləliklə, bu gün sizə Linux sistemində yaddaş istifadəsini yoxlamaq üçün istifadə edilə bilən əmrləri göstərəcəyik. Yaddaşa RAM və dəyişdirmə daxildir.

Paylaşılan yaddaşı yoxlamaq və serverlərdə yaddaş istifadəsini və istifadə olunmamış mənbələri yoxlamaq çox vaxt vacibdir. Bir veb serverdə işləyirsinizsə, serverin ziyarətçilərə xidmət etmək üçün kifayət qədər yaddaşı olmalıdır. Bu baş verməsə, yaddaş kifayət etmədiyi üçün trafik artdıqda sayt çox yavaşlayacaq və ya hətta əlçatmaz olacaq. Masaüstü kompüterdə baş verənlərlə eynidir.

1. Pulsuz komanda

Pulsuz əmr, Linux -da yaddaş istifadəsini yoxlamaq üçün istifadə etmək üçün ən sadə və ən asan əmrdir. İşdə qısa bir nümunə

$ pulsuz -m ümumi istifadə olunan pulsuz paylaşılan buferlər önbelleğe alındı ​​Mem: 7976 6459 1517 0 865 2248 - / + tamponlar / önbellek: 3344 4631 Mübadilə: 1951 0 1951

Seçim -m bütün məlumatları meqabaytda göstərir. RAM -ın ümumi ümumi miqdarı sistemdə quraşdırılmış 7976 MB, yəni 8 GB -dır. Dinamik istifadə olunur Linux -da istifadə edilə bilən RAM miqdarını göstərir, bizim vəziyyətimizdə təxminən 6.4 GB olacaq. Burada tutulan şey sütunlardır önbelleğe alınmıştamponlar... İkinci sətir 4.6 GB pulsuz olduğunu söyləyir. Buferlər və önbellek miqdarı əlavə edilən ilk sətirdəki pulsuz yaddaşdır.

Linux, performansı artırmaq üçün önbelleğe alma vərdişinə sahibdir ki, yaddaş azad olunsun və lazım olduqda istifadə olunsun.
Son sətir yaddaş dəyişikliyidir ( dəyişdirmək), bu vəziyyətdə tamamilə pulsuzdur.

2. / proc / meminfo

Yaddaş istifadəsini yoxlamağın növbəti yolu / proc / meminfo oxumaqdır. Unutmayın ki, / proc fayl sistemində heç bir real fayl yoxdur. Kernel və sistem haqqında dinamik məlumatlar olan virtual fayllardır.

$ cat / proc / meminfo MemTotal: 8167848 kB MemFree: 1409696 kB Tamponlar: 961452 kB Önbelleğe alınmış: 2347236 kB SwapCached: 0 kB Aktiv: 3124752 kB Aktiv deyil: 2781308 kB Aktiv (anon): 2603376 kB Aktiv olmayan (anon): 3090 ): 521376 kB Aktiv deyil (fayl): 2472252 kB Çəkilməz: 5864 kB Mlocked: 5880 kB SwapTotal: 1998844 kB Swap Pulsuz: 1998844 kB Kirli: 7180 kB Yazma: 0 kB Anon Səhifələr: 2603272 kB Eşlenen: 788380 kB ShmeBe: 318 SB 151,760 kB SUnreclaim: 48708 kB KernelStack: 6488 kB PageTables: 78592 kB NFS_Unstable: 0 kB Sıçrama: 0 kB WritebackTmp: 0 kB CommitLimit: 6082768 kB Committed_AS: 9397536 kB VmalPorblarTelefonları: 0KP HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepages ölçüsü: 2048 kB DirectMap4k: 62464 kB DirectMap2M: 8316928 kB


2021
maccase.ru - Android. Markalar. Dəmir. xəbərlər