CentOS (Linux) дээр файлын кэшийг хэрхэн хязгаарлах вэ? Линукс дээр Swappiness болон кэшийг тохируулах Линукс цөм дэх кэш кэшийг удирдах 2.4.

Гэр / Асахгүй байна
Линукс дээр бараг бүх тушаалууд график интерфэйсгүй байдаг. Хандалтын серверүүд дээр ажиллахдаа зөвхөн бүрхүүл. Тиймээс өнөөдөр бид Линукс систем дээрх санах ойн ашиглалтыг шалгах командуудыг харуулах болно. Санах ойд RAM болон swap орно.

Серверүүд дээр хуваалцсан санах ойн ашиглалт, мөн ашиглагдаагүй нөөцийг шалгах нь ихэвчлэн чухал байдаг. Хэрэв та вэб сервер ажиллуулж байгаа бол сервер нь сайтын зочдод үйлчлэх хангалттай санах ойтой байх ёстой. Хэрэв тийм биш бол санах ой хүрэлцэхгүй учраас ачаалал ихсэх үед сайт маш удаашрах эсвэл бүр ажиллах боломжгүй болно. Ширээний компьютер дээр тохиолддог зүйлтэй ижил зүйл.

1. Чөлөөт команд

Үнэгүй команд нь Линукс дээрх санах ойн ашиглалтыг шалгах хамгийн энгийн бөгөөд хэрэглэхэд хялбар тушаал юм. Богино жишээ энд байна

$ үнэгүй -м нийт ашигласан үнэгүй хуваалцсан буфер кэштэй Мем: 7976 6459 1517 0 865 2248 -/+ буфер/кэш: 3344 4631 Своп: 1951 0 1951

Сонголт бүх өгөгдлийг мегабайтаар харуулна. Нийт нийт хэмжээ RAMСистем дээр суулгасан 7976 MB, өөрөөр хэлбэл 8 ГБ. Багана ашигласанЛинукс дээр ашиглаж болох RAM-ийн хэмжээг харуулсан бөгөөд манай тохиолдолд 6.4 ГБ орчим байх болно. Энд байгаа зүйл бол чанга яригч юм кэштэйТэгээд буфер. Хоёрдахь мөрөнд 4.6 ГБ үнэгүй байна. Энэ бол буфер болон кэш санах ой нэмсэн эхний мөрөнд байгаа чөлөөт санах ой юм.

Линукс нь гүйцэтгэлийг сайжруулах зорилгоор кэш хийх зуршилтай тул санах ойг суллаж, шаардлагатай үед ашиглах боломжтой.
Сүүлийн мөр нь санах ой солих ( солих), энэ тохиолдолд бүрэн үнэ төлбөргүй байдаг.

2. /proc/meminfo

Санах ойн ашиглалтыг шалгах дараагийн арга бол /proc/meminfo файлыг унших явдал юм. /proc файлын систем нь ямар ч бодит файл агуулаагүй гэдгийг анхаарна уу. Эдгээр нь цөм болон системийн тухай динамик мэдээллийг агуулсан виртуал файлууд юм.

$ cat /proc/meminfo MemНийт: 8167848 кБ MemFree: 1409696 кБ Буфер: 961452 кБ Кэш: 2347236 кБ СвопКэш: 0 кБ Идэвхтэй: 3124752 кБ Идэвхгүй: 067 кБ Идэвхгүй e(anon): 309 056 кБ Идэвхтэй (файл): 521376 кБ Идэвхгүй(файл): 2472252 кБ Муухай: 5864 кБ SwapНийт: 1998844 кБ СвопЧөлөөт: 1998844 кБ Бохир: 7180 кБ 002 Б. 788380 кБ Шмем: 311596 кБ Хавтан : 200468 кБ Сэргүүлэх боломжтой: 151760 кБ SUnreclaim: 48708 кБ KernelStack: 6488 кБ Page Хүснэгт: 78592 кБ NFS_Тогтворгүй: 0 кБ Боунц: 0 кБ WritebackTmp_KBCommitted: kB Committed 9397536 кБ Vmalloc Нийт: 34359738367 кБ VmallocАшигласан: 420204 кБ VmallocChunk: 34359311104 кБ Техник хангамж эвдэрсэн: 0 кБ AnonHugePages: 0 kB HugePages_Нийт: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 кБ DirectB628 kB DirectB624 Б

RAM ашиглах, солих (солилцооны хуваалт)-тай холбоотой Ubuntu-ийн үйлдлийг өөрчилье. vm.swappiness гэж нэрлэгддэг параметр байдаг бөгөөд энэ нь өгөгдмөл утга нь 60 бөгөөд своп хуваалт руу хуудсуудыг идэвхтэй хаях санах ойн эзлэх хувийг хянадаг. Өөрөөр хэлбэл, 100-60=40% эзлэгдсэн санах ойд Ubuntu аль хэдийн swap хуваалтыг ашиглаж эхэлнэ. At их хэмжээгээрКомпьютерийн RAM-ийн хувьд vm.swappiness параметрийг 10 болгож өөрчилсөн нь дээр бөгөөд ингэснээр эзэлсэн RAM 100-10=90% хүрэх хүртэл своп ашиглахгүй байхыг Ubuntu-д тушаана. Утгыг 60 биш 10 болгоё. Консол дээр дараах командыг оруулна уу.

Echo 10 > /proc/sys/vm/swappiness

Sysctl -w vm.swappiness=10

Дахин ачаалсны дараа тохиргоог хадгалахын тулд /etc/sysctl.conf файлын төгсгөлд дараах мөрийг нэмнэ үү.

Vm.swappiness=10

Тохиргоог даруй хэрэгжүүлэхийн тулд:

Sysctl -х

Үүнээс гадна бид хэд хэдэн параметрийн талаар ярьж болно.
Pseudo-файл vfs_cache_pressure нь утгыг хадгалдаг - кэшэд хуваарилагдсан санах ойн түвшин. Өгөгдмөл утга: 100. Энэ параметрийг нэмэгдүүлснээр цөм нь кэшээс ашиглагдаагүй санах ойн хуудсыг илүү идэвхтэй хаяхад хүргэдэг, i.e. Кэшт хуваарилагдсан RAM-ийн хэмжээ удаан өсөх бөгөөд энэ нь своп хуваалтыг ашиглах магадлалыг бууруулна. Энэ параметрийг бууруулснаар цөм нь эсрэгээр санах ойн хуудсуудыг кэш, түүний дотор своп хэлбэрээр хадгалах болно, жишээлбэл, хэрэв бид 512 МБ санах ойтой бол энэ нь утга учиртай болно. vfs_cache_pressure параметрийг 50 болгож тохируулж болно. Энэ нь своп хуваалт дахь дискний үйлдлүүдийн тоог багасгах тул ашиглагдаагүй хуудсуудыг устгаснаар энэ параметрийг цаашид багасгах нь санах ойн хомсдолд хүргэж болзошгүй юм.
Хэрэв та системийг хурдасгахыг хүсч байгаа бөгөөд танд хангалттай RAM (2 ГБ ба түүнээс дээш) байгаа бол системийн утгыг дараах байдлаар өөрчил: swappiness = 10, vfs_cache_pressure = 1000 (анхдагч 100), /etc/sysctl-д дараах мөрийг нэмнэ үү. .conf файл:

Vm.vfs_cache_даралт=1000

эсвэл шууд:

Sysctl -w vm.vfs_cache_pressure=1000

Линукс дээр кэш хийх

Өгөгдлийг дискэнд (ямар ч програмаар) бичих үед Линукс энэ мэдээллийг санах ойн Page Cache гэж нэрлэдэг хэсэгт хадгалдаг. Энэ санах ойн бүсийн талаарх мэдээллийг үнэгүй, vmstat эсвэл дээд тушаалуудыг ашиглан харж болно. Бүрэн мэдээлэлТа энэ санах ойн хэсгийг /proc/meminfo файлаас харж болно. 4 ГБ RAM-тай сервер дээрх энэ файлын жишээг доор харуулав.

MemНийт: 3950112 кБ
MemFree: 622560 кБ
Буфер: 78048 кБ
Кэш: 2901484 кБ
SwapCached: 0 кБ
Идэвхтэй: 3108012 кБ
Идэвхгүй: 55296 кБ
Дээд нийт: 0 кБ
Өндөр үнэ төлбөргүй: 0 кБ
Бага Нийт: 3950112 кБ
Бага үнэ төлбөргүй: 622560 кБ
Своп Нийт: 4198272 кБ
SwapFree: 4198244 кБ
Бохир: 416 кБ
Бичлэг: 0 кБ
Газрын зураг: 999852 кБ
Хавтан: 57104 кБ
Хүссэн_AS: 3340368 кБ
Хуудасны хүснэгт: 6672 кБ
VmallocНийт: 536870911 кБ
Vmalloc ашигласан: 35300 кБ
VmallocChunk: 536835611 кБ
Асар их_Хуудас: 0
Асар их_Үнэгүй хуудас: 0
Том хуудасны хэмжээ: 2048 кБ

Хуудасны кэшийн хэмжээг "Кэш" параметрт харуулсан бөгөөд энэ жишээнд 2.9 ГБ байна. Хуудсуудыг санах ойд бичих тусам "Бохир" параметрийн хэмжээ нэмэгддэг. Диск рүү бичиж эхлэхэд "Буцааж бичих" параметр нь бичлэг дуусах хүртэл нэмэгдэнэ. Оролт/гаралтын (I/O) үйлдлүүд дараалалд орсон боловч дискэнд хараахан бичигдээгүй байгаа үед түүний утга зөвхөн санал хураалтын явцад нэмэгддэг тул "Буцааж бичих" параметрийг өндөр харах нь нэлээд хэцүү байдаг.
Линукс нь ихэвчлэн pdflush процессыг ашиглан кэш өгөгдлийг диск рүү бичдэг. Систем дээр ямар ч үед 2-оос 8 pdflush thread ажиллаж байна. /proc/sys/vm/nr_pdflush_threads файлаас хичнээн их байгааг харж болно. одоогооридэвхтэй утаснууд. Одоо байгаа бүх pdflush thread-ууд дор хаяж 1 секунд завгүй байх бүрт. Шинэ хэлхээнүүд нь төхөөрөмж бүрийн дараалалд өгөгдөл бичихийг оролддог идэвхтэй төхөөрөмжкэшээс 1 урсгалыг цэвэрлэх өгөгдөл байсан. Pdflush-аас ямар ч үйлдэл хийлгүйгээр секунд өнгөрөх бүрд 1 thread устдаг. Линукс дээр та pdflush thread-ийн хамгийн бага ба хамгийн их тоог тохируулах боломжтой.

pdflush-г тохируулж байна
Pdflush thread бүрийг /proc/sys/vm доторх хэд хэдэн параметрээр удирддаг:

  • /proc/sys/vm/dirty_writeback_centisecs (анхдагч 500): секундын хэдэн зуунд. Энэ тохиргоо нь pdflush нь диск рүү өгөгдөл бичихэд хэр давтамжтай ажиллаж байгааг заадаг. Анхдагч байдлаар, 5 секунд тутамд 2 хэлхээг үргэлжлүүлнэ.
    pdflush процесст өгөгдлийг илүү түрэмгий байдлаар кэшлэх боломжийг олгохын тулд dirty_writeback_centisecs-ийг багасгах оролдлогыг таслан зогсоож, баримтжуулаагүй үйлдэл байж болзошгүй. Жишээлбэл, Линуксийн 2.6 цөмийн эхэн хувилбаруудад mm/page-writeback.c файлд "хэрэв дискний бичих ажиллагаа dirty_writeback_centisecs параметрээс удаан үргэлжилдэг бол интервалыг 1 секунд болгож тохируулна" гэсэн логикийг агуулсан байсан. Энэ логикийг зөвхөн цөмийн кодоор тайлбарласан бөгөөд түүний ажиллагаа нь Линуксийн цөмийн хувилбараас хамаарна. Энэ нь тийм ч сайн биш тул та энэ параметрийг бууруулахаас хамгаалагдах болно.
  • code>/proc/sys/vm/dirty_expire_centiseconds (анхдагчаар 3000): зуу дахь секундын дотор. Энэ параметр нь өгөгдлийг диск рүү бичихээс өмнө кэшэд хэр удаан үлдэхийг зааж өгдөг. Өгөгдмөл утга нь маш урт: 30 секунд. Энэ нь хэзээ гэсэн үг хэвийн үйл ажиллагааӨөр pdflush аргыг дуудах хангалттай өгөгдлийг кэш рүү бичих хүртэл Linux нь кэшэд 30 секундээс бага хугацаанд хадгалагдсан диск рүү өгөгдлийг бичихгүй.
  • /proc/sys/vm/dirty_background_ratio (анхдагч 10): Диск рүү өгөгдөл бичихээс өмнө хуудасны кэшээр дүүргэж болох RAM-ийн хамгийн их хувь. Линуксийн цөмийн зарим хувилбарууд энэ параметрийг 5% болгож тохируулж болно.
    Ихэнх баримт бичигт энэ параметрийг нийт RAM-ийн хувиар тодорхойлсон боловч дагуу эх кодуудЛинукс цөм нь тийм биш. Meminfo-г харахад бохир_арын_харьцаа параметрийг MemFree + Cached - Mapped гэсэн утгаас тооцдог. Тэгэхээр манай демо системийн хувьд 10% нь 250MB-аас арай бага боловч 400MB биш юм.

pdflush хэзээ бичлэг хийж эхэлдэг вэ?
Анхдагч тохиргоонд дискэнд бичсэн өгөгдөл дараах хүртэл санах ойд үлдэнэ.

Хэрэв сервер дээр бичих үйлдлүүд байнга явагддаг бол нэг л өдөр бохир_арын_харьцаа параметрт хүрэх ба та dirty_expire_centiseconds параметрийн хугацаа дуусахыг хүлээлгүйгээр зөвхөн энэ параметрээр дамжуулан дискэнд бичих бүх бичвэрүүдийг харах боломжтой болно.

Хуудас бичих үйл явц
Параметр /proc/sys/vm/dirty_ratio (анхдагчаар 40) нь pdflush диск рүү өгөгдөл бичихээс өмнө хуудасны кэшэд хуваарилагдах нийт RAM-ийн хамгийн их хувь юм.

Тэмдэглэл: Диск рүү бичих явцад бичих буферийг дүүргэсэн процесс зогсохгүй бүх бичих процессууд хаагдана. Энэ нь нэг процесс нь систем дээрх бүх I/O үйлдлийг блоклоход хүргэдэг.

Бичих эрчимтэй үйлдлүүдэд зориулж Линуксийг оновчтой болгох шилдэг туршлагууд
Ихэвчлэн дискний дэд системийн гүйцэтгэлийг нэмэгдүүлэхийг оролдох үед Линукс нь нэг дор хэт их мэдээллийг буфер болгодог гэсэн асуудалтай тулгардаг. Энэ нь ялангуяа fsync дуудлага ашиглан файлын системийг синхрончлох шаардлагатай үйлдлүүдэд мэдэгдэхүйц юм. Хэрэв ийм дуудлагын үеэр кэшэд маш их өгөгдөл байгаа бол энэ дуудлага дуусах хүртэл систем хөлдөж магадгүй юм.
Өөр нэг нийтлэг асуудал бол физик дискийг бичихээс өмнө хэтэрхий их зүйлийг бичих шаардлагатай байдаг тул оролт гаралтын үйлдлүүд ердийн үйлдлээс илүү олон удаа тохиолддог.

  • бохир_арын_харьцаа: Тохируулах үндсэн хэрэгсэл. Ихэвчлэн энэ параметрийг бууруулдаг. Хэрэв таны зорилго бол кэшэд хадгалагдсан өгөгдлийн хэмжээг багасгах бөгөөд ингэснээр өгөгдлийг бүгдийг нь нэг дор биш харин аажмаар диск рүү бичих юм бол энэ параметрийг багасгах нь хамгийн үр дүнтэй арга юм. Өгөгдмөл утга нь их хэмжээний RAM, удаан дисктэй системүүдэд хамгийн тохиромжтой.
  • бохир_харьцаа: Тохируулах хамгийн чухал хоёр дахь параметр. Хэрэв энэ тохиргоог мэдэгдэхүйц бууруулбал диск рүү бичих шаардлагатай програмууд бүгд хаагдах болно.
  • dirty_expire_centisecs: Энэ параметрийг багасгаж үзээрэй, гэхдээ хэт их биш. Энэ нь хуудсуудыг диск рүү бичихээс өмнө кэшэд зарцуулах хугацааг багасгах боломжийг олгодог боловч нөгөө талаас энэ нь диск рүү бичих дундаж хурдыг мэдэгдэхүйц бууруулах бөгөөд энэ нь удаан дисктэй системүүдэд мэдэгдэхүйц байх болно.

Үүний үр дүнд бид авдаг
/etc/sysctl.conf файлд бид нэмнэ:

Vm.бохир_арын_харьцаа = 10 vm.бохир_харьцаа = 40

Дараа нь бид кэш болон дискний өгөгдлийг синхрончилж, кэшийг цэвэрлэж, параметрүүдийг хадгална.

Синк хийх; echo 3 > /proc/sys/vm/drop_caches; sysctl -p

Диск бичих эцсийн боловсруулалтын тоог багасгахын тулд та дараахь зүйлийг тохируулах хэрэгтэй.

Vm.dirty_writeback_centisecs = 15000

Бусадтай адил үйлдлийн систем,Linux нь RAM-тай маш үр дүнтэй байдаг. Боломжтой санах ойг процессуудын хооронд чөлөөтэй тарааж, ашиглагдаагүй хуудсууд нь дискэн дээрх своп хуваалт руу шилждэг бөгөөд санах ой хэтэрсэн тохиолдолд цөмд суурилуулсан тусгай механизмыг ажиллуулж, бүх процессыг шинжилж, буруутанг устгадаг.

Аливаа процесс нь өгөгдлийг диск рүү бичихэд цөм нь тусдаа кэшэд хадгалагддаг. Ихэнхдээ энэ кэш нь маш их зай эзэлдэг. Энэ нийтлэлд бид Линукс дээр санах ойг хэрхэн чөлөөлөх, эсвэл илүү нарийвчлалтайгаар програмын үүсгэсэн кэшийг хэрхэн цэвэрлэх талаар авч үзэх болно.

Линукс түгээлт бүрт та Линуксийн санах ойн кэшийг цэвэрлэхийн тулд гурван тушаалыг ашиглаж болно. Түүнээс гадна бид ямар ч процессыг дуусгах шаардлагагүй. Эдгээр тушаалууд нь:

PageCache-г цэвэрлэж байна:

синхрончлох; echo 1 > /proc/sys/vm/drop_caches

Инод ба дентри цэвэрлэх:

синхрончлох; echo 2 > /proc/sys/vm/drop_caches

Inod болон dentrie болон PageCache цэвэрлэх:

синхрончлох; echo 3 > /proc/sys/vm/drop_caches

Эдгээр командын аль нэгийг ажиллуулахын өмнө дараахыг ажиллуулна уу:

Команд бүр ажиллахын тулд супер хэрэглэгчийн эрхийг шаарддаг тул энэ нь зайлшгүй шаардлагатай. Одоо эдгээр тушаалуудыг гүйцэтгэхэд юу болохыг харцгаая.

Синхрончлолын хэрэгсэл нь системд хадгалагдсан боловч хараахан бичигдээгүй байгаа бүх өгөгдлийг диск рүү бичихийг албаддаг. Энэ нь аль болох их санах ойг суллахад шаардлагатай. Анхдагч байдлаар, өгөгдлийг дискэнд бичсэний дараа кэшээс устгадаггүй, ингэснээр програм шаардлагатай бол илүү хурдан унших боломжтой болно.

Хэрэв бид синхрончлолын командыг гүйцэтгэхгүй бол бид бас бага зэрэг зай гаргах болно, гэхдээ үүнийг хэрэгжүүлсний дараа үр дүн нь илүү дээр байх болно.

Хуваах тэмдэг; өөр командыг гүйцэтгэхийн өмнө эхний команд дуусах хүртэл хүлээхийг бүрхүүлд хэлнэ. Сүүлийн команд echo 1 > /proc/sys/vm/drop_caches нь /proc/sys/vm/drop_caches файлд 1-ийн утгыг бичнэ. Энэ нь бидний сонгосон кэшийн төрлийг цэвэрлэх шаардлагатайг цөмд дохио өгдөг.

Линукс дээрх кэшийн төрлүүд

Одоо эдгээр командуудыг цэвэрлэх боломжийг олгодог кэшийн төрлүүд болон энэ бүхэн хэрхэн ажилладагийг харцгаая.

PageCacheэсвэл хуудасны кэш нь цөмд таны бичсэн эсвэл дискнээс уншсан бүх өгөгдлийг байршуулдаг газар юм. Энэ нь системийг ихээхэн хурдасгадаг, учир нь хэрэв програмд ​​хоёр дахь удаагаа ижил өгөгдөл шаардлагатай бол үүнийг зүгээр л RAM-аас авах болно. Гэхдээ энэ шалтгааны улмаас энэ кэш хамгийн их зай эзэлдэг.

Та үнэгүй хэрэглүүрийг ашиглан хуудасны кэшийн хэмжээг харах боломжтой. Энд үүнийг сүүлийн баганад харуулав - кэштэй:

Энэ төрлийн кэш нь цэвэрлэхэд хамгийн үр дүнтэй бөгөөд аюулгүй юм.

Инод ба дентри кэшфайлын системд мөн хамаарна. Зөвхөн өгөгдөл өөрөө биш, харин файлын системийн бүтэц, файл, хавтасны байршил зэргийг бичдэг. Файлын байршил эсвэл хавтасны агуулгыг асуухад цөм нь энэ бүх мэдээллийг агуулсан тусгай бүтцийг үүсгэдэг. Дараагийн удаа хүсэлт гаргахад бүтэц нь аль хэдийн санах ойд хадгалагдах болно. Файлын систем бүр өөрийн гэсэн inode кэш болон хуваалцсан dentrie кэштэй.

Энэ кэш маш бага санах ой эзэлнэ. Өгөгдлийг байтаар харуулсан бөгөөд таны харж байгаагаар энэ нь маш бага юм. Та үүнийг дараах тушаалаар харж болно.

муур /proc/slabinfo | egrep dentry\|inode

Линуксийн санах ойг суллахын тулд үүнийг цэвэрлэхийг зөвлөдөггүй, учир нь санах ой бага зарцуулагддаг бөгөөд файлын системийг шинээр скан хийхэд харьцангуй удаан хугацаа шаардагдана.

Би кэшийг огт цэвэрлэх шаардлагатай юу?

Нэгдүгээрт, хэрэв маш их санах ой ашиглаж байгаа бол та хуудасны кэшийг цэвэрлэхийг хүсч болно, ялангуяа энэ нь маш их санах ой эзэлдэг хуудасны кэш юм. Хоёрдугаарт, хэрэв та ямар нэгэн файлын систем эсвэл цөмийн тохиргоог өөрчилсөн бол Линуксийн санах ойн кэшийг цэвэрлэх шаардлагатай болж магадгүй бөгөөд энэ нь унших/бичих үйлдлийн хурдад хэрхэн нөлөөлсөнийг шалгахыг хүсч байна. Энэ тохиолдолд та бүх кэшийг цэвэрлэж, дахин ачаалахгүйгээр хийх боломжтой бөгөөд энэ нь маш тохиромжтой.

Линукс үйлдлийн систем нь дискэнд хандахын өмнө дискний кэшийг шалгаж, шаардлагатай өгөгдөл байгаа тохиолдолд диск рүү хандах боломжгүй байхаар бүтээгдсэн. Хэрэв та Линуксийн кэшийг цэвэрлэвэл үйлдлийн систем нь дискэн дээрх өгөгдлийг хайх шаардлагатай тул бага зэрэг удаашрах болно.

Автомат кэш цэвэрлэх

Өдөр бүр өглөөний хоёр цагт cron ажил төлөвлөгчийг ашиглан санах ойн кэшийг хэрхэн автоматаар цэвэрлэхийг харцгаая.

Эхлээд бүтээцгээе bash скриптдараах агуулгатай:

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

синхрончлол; echo 1 > /proc/sys/vm/drop_caches

Хамгийн их зай эзэлдэг тул бид зөвхөн хуудасны кэшийг цэвэрлэх болно. Системийн гүйцэтгэлийг шаардлагагүйгээр бууруулахгүйн тулд бид бусад төрлүүдэд хүрэхгүй.

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

Зөвхөн cron төлөвлөгч дээр даалгавраа нэмэх л үлдлээ. Үүнийг хийхийн тулд тушаалыг ажиллуулна уу:

Нээгдсэн засварлагч дээр дараах мөрийг нэмнэ үү.

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

Одоо энэ скрипт шөнө бүр ажиллаж, санах ойг цэвэрлэж сервер хэвийн ажиллах болно.

Санах ойн кэшийн хэмжээг тохируулах

Кэшийг цэвэрлэхгүй байх нь илүү тохиромжтой, гэхдээ хязгаарыг хэтрүүлсэн тохиолдолд систем өөрөө шаардлагагүй хуудсыг устгах болно. Та систем хэдэн мегабайт кэш ашиглахыг тодорхой хязгаарлаж болохгүй. Шаардлагатай бүх санах ойг ашиглах боловч хугацаа нь дууссан хуудсыг кэшээс устгах хурдыг тохируулж болно.

Үүнийг /proc/sys/vm/vfs_cache_pressure файл хариуцна. Энэ нь хуудсуудыг кэшээс хэр түрэмгий байдлаар устгах тухай харьцангуй хэмжүүрийг агуулдаг. Анхдагчаар параметрийг 100 гэж тохируулсан. Хэрэв та үүнийг багасгавал цөм нь хуудсуудыг бага устгадаг бөгөөд энэ нь кэшийг маш хурдан нэмэгдүүлэхэд хүргэдэг. Хэрэв тэг гэж тохируулсан бол хуудаснууд огт устахгүй. Хэрэв утга нь 100-аас их байвал кэшийн хэмжээ удаан өсөх бөгөөд ашиглагдаагүй хуудсыг нэн даруй устгах болно.

Жишээлбэл, кэшийн хамгийн бага хэмжээг хийцгээе:

echo 1000 > /proc/sys/vm/vfs_cache_pressure

Энэ нь таны системийн гүйцэтгэлийг ихээхэн бууруулна гэдгийг бүү мартаарай, учир нь өгөгдлийг кэшийн оронд дискнээс унших болно.

Своп санах ойг хэрхэн цэвэрлэх вэ

Своп зайг цэвэрлэх нь маш хялбар. Үүнийг хийхийн тулд ажиллуулна уу:

swapoff -a && swapon -a

Свопыг арилгах үед бүх өгөгдлийг RAM руу буцааж шилжүүлэх болно гэдгийг санаарай.

Дүгнэлт

Ингээд л болоо. Та Линуксийн кэшийг хэрхэн цэвэрлэж, санах ойг хэрхэн суллахаа мэддэг болсон. Энэ нийтлэлд өгөгдсөн бүх тушаалуудыг супер хэрэглэгчийн хувьд гүйцэтгэх ёстой гэдгийг бүү мартаарай, эс тэгвээс юу ч ажиллахгүй. Хэрэв танд асуулт байвал сэтгэгдэл дээр асуугаарай!

Холбоотой нийтлэлүүд:


Саяхан нэг дээр виртуал серверүүдБи диск рүү бичихэд удаан хугацаа шаардсан асуудалтай тулгарсан. Энэ сэдвийн дор би Линукс дээр диск бичих үйлдлийг кэш хийх талаар дэлгэрэнгүй авч үзсэн сонирхолтой сэдвийг олсон. Өнөөдөр энэ нийтлэлийн орчуулга гарах болно.

Линукс дээр кэш хийх

Өгөгдлийг дискэнд (ямар ч програмаар) бичих үед Линукс энэ мэдээллийг санах ойн Page Cache гэж нэрлэдэг хэсэгт хадгалдаг. Энэ санах ойн бүсийн талаарх мэдээллийг тушаалуудыг ашиглан харж болно үнэгүй, vmstatэсвэл дээд. Энэ санах ойн бүсийн талаарх бүрэн мэдээллийг файлаас олж болно /proc/meminfo. 4 ГБ RAM-тай сервер дээрх энэ файлын жишээг доор харуулав.

MemTotal: 3950112 кБ MemFree: 622560 кБ Буфер: 78048 кБ Кэш: 2901484 кБ СвопКэш: 0 кБ Идэвхтэй: 3108012 кБ Идэвхгүй: 55296 кБ HighTotal: kB3010 Бага үнэ төлбөргүй: 62256 0 кБ СвопНийт: 4198272 кБ Своп үнэгүй : 4198244 кБ Бохир: 416 кБ Бичлэг: 0 кБ Зураглагдсан: 999852 кБ Хавтан: 57104 кБ Хуудас: 6672 кБ VmallocНийт: 5368709 kB Vmalloc 536835 611 кБ Асар_Хуудас_Нийт: 0 Асар_Хуудас Үнэгүй: 0 Асар том хуудас: 2048 кБ

Хуудасны кэшийн хэмжээг "Кэш" параметрт харуулсан бөгөөд энэ жишээнд 2.9 ГБ байна. Хуудсуудыг санах ойд бичих тусам "Бохир" параметрийн хэмжээ нэмэгддэг. Диск рүү шууд бичиж эхлэх үед "Буцааж бичих" параметр нь бичлэг дуусах хүртэл нэмэгдэнэ. Оролт/гаралтын (I/O) үйлдлүүд дараалалд орсон боловч дискэнд хараахан бичигдээгүй байгаа үед түүний утга зөвхөн санал хураалтын явцад нэмэгддэг тул "Буцааж бичих" параметрийг өндөр харах нь нэлээд хэцүү байдаг.
Линукс нь ихэвчлэн процесс ашиглан кэшээс диск рүү өгөгдлийг бичдэг pdflush. Системд ямар ч үед 2-оос 8 утас ажиллаж байна pdflush. Файлд /proc/sys/vm/nr_pdflush_threadsТа одоогоор хичнээн идэвхтэй хэлхээ идэвхтэй байгааг харж болно. Одоо байгаа бүх pdflush thread-ууд дор хаяж 1 секунд завгүй байх бүрт. Шинэ хэлхээнүүд нь төхөөрөмжийн дараалалд өгөгдөл бичихийг оролддог бөгөөд ингэснээр идэвхтэй төхөөрөмж тус бүрд кэшээс 1 урсгалыг цэвэрлэх өгөгдөл байх болно. Pdflush-аас ямар ч үйлдэл хийлгүйгээр секунд өнгөрөх бүрд 1 thread устдаг. Линукс дээр та pdflush thread-ийн хамгийн бага ба хамгийн их тоог тохируулах боломжтой.

pdflush-г тохируулж байна

pdflush урсгал бүрийг хэд хэдэн параметрээр удирддаг /proc/sys/vm:

  • /proc/sys/vm/dirty_writeback_centisecs(анхдагч 500): секундын хэдэн зуунд. Энэ тохиргоо нь pdflush нь диск рүү өгөгдөл бичихэд хэр давтамжтай ажиллаж байгааг заадаг. Анхдагч байдлаар, 5 секунд тутамд 2 хэлхээг үргэлжлүүлнэ.
    pdflush процесст өгөгдлийг илүү түрэмгий байдлаар кэшлэх боломжийг олгохын тулд dirty_writeback_centisecs-ийг багасгах оролдлогыг таслан зогсоож, баримтжуулаагүй үйлдэл байж болзошгүй. Жишээлбэл, Линуксийн 2.6 цөмийн эхэн хувилбаруудад mm/page-writeback.c файлд "хэрэв дискний бичих ажиллагаа dirty_writeback_centisecs параметрээс удаан үргэлжилдэг бол интервалыг 1 секунд болгож тохируулна" гэсэн логикийг агуулсан байсан. Энэ логикийг зөвхөн цөмийн кодоор тайлбарласан бөгөөд түүний ажиллагаа нь Линуксийн цөмийн хувилбараас хамаарна. Энэ нь тийм ч сайн биш тул та энэ параметрийг бууруулахаас хамгаалагдах болно.
  • /proc/sys/vm/dirty_expire_centiseconds(анхдагчаар 3000): секундын хэдэн зуунд. Энэ параметр нь өгөгдлийг диск рүү бичихээс өмнө кэшэд хэр удаан үлдэхийг зааж өгдөг. Өгөгдмөл утга нь маш урт: 30 секунд. Энэ нь хэвийн ажиллагааны явцад өөр pdflush аргыг дуудах хангалттай өгөгдлийг кэш рүү бичих хүртэл Linux нь кэшэд 30 секундээс бага хугацаанд хадгалагдсан өгөгдлийг диск рүү бичихгүй гэсэн үг юм.
  • /proc/sys/vm/бохир_арын_харьцаа(өгөгдмөл 10): Диск рүү өгөгдөл бичихээс өмнө хуудасны кэшээр дүүргэж болох RAM-ийн хамгийн их хувь. Линуксийн цөмийн зарим хувилбарууд энэ параметрийг 5% болгож тохируулж болно.

    Ихэнх баримт бичигт энэ тохиргоог нийт RAM-ийн хувиар тодорхойлдог боловч Линуксийн цөмийн эх кодын дагуу энэ нь тийм биш юм. Meminfo-г харахад бохир_арын_харьцаа параметрийг утгаас нь тооцдог MemFree + Cached - Газрын зураг. Тэгэхээр манай демо системийн хувьд 10% нь 250MB-аас арай бага боловч 400MB биш юм.

Нийт: pdflush хэзээ бичлэг хийж эхэлдэг вэ?

Анхдагч тохиргоонд дискэнд бичигдсэн өгөгдөл дараах хүртэл санах ойд үлдэнэ.

  • тэд 30 секундээс илүү хугацаанд санах ойд үлддэг;
  • кэштэй хуудсууд нь ажлын санах ойн 10 гаруй хувийг эзэлдэг.

Хэрэв сервер дээр бичих үйлдлүүд байнга явагддаг бол нэг л өдөр бохир_арын_харьцаа параметрт хүрэх ба та dirty_expire_centiseconds параметрийн хугацаа дуусахыг хүлээлгүйгээр зөвхөн энэ параметрээр дамжуулан дискэнд бичих бүх бичвэрүүдийг харах боломжтой болно.

Хуудас бичих үйл явц

Параметр /proc/sys/vm/бохир_харьцаа(өгөгдмөл 40): pdflush диск рүү өгөгдөл бичихээс өмнө хуудасны кэшэд хуваарилж болох нийт RAM-ийн хамгийн их хувь.

Анхаарна уу: Диск рүү бичих явцад бичих буферийг дүүргэсэн процесс төдийгүй бүх процессууд бичихийг хориглодог. Энэ нь нэг процесс нь систем дээрх бүх I/O үйлдлийг блоклоход хүргэдэг. Үүнийг хэрэгжүүл

Байнга бичлэг хийх шаардлагатай үйлдлүүдэд Линуксыг оновчтой болгох зөвлөмж

Ихэвчлэн хүмүүс дискний дэд системийн гүйцэтгэлийг нэмэгдүүлэхийг оролдох үед Линукс нь нэг дор хэт их мэдээллийг буфер болгодог гэсэн асуудалтай тулгардаг. Энэ нь ялангуяа fsync дуудлагыг ашиглан файлын системийн синхрончлолыг шаарддаг үйлдлүүдэд хэцүү байдаг. Хэрэв ийм дуудлагын үеэр кэшэд маш их өгөгдөл байгаа бол энэ дуудлага дуусах хүртэл систем хөлдөж магадгүй юм.
Өөр нэг нийтлэг асуудал нь физик диск рүү бичихээс өмнө маш их зүйлийг бичих шаардлагатай байдаг тул I/O үйлдлүүд ердийн үйл ажиллагаанаас илүү олон удаа тохиолддог; Том кэш дүүрэх хүртэл диск бичихгүй байх хугацааг уртасгах бөгөөд энэ үед pdflush триггерүүдийн аль нэг нь идэвхжиж, өгөгдлийг дээд хурдаар бичих болно.

бохир_арын_харьцаа: Үндсэн тохируулах хэрэгсэл нь ихэвчлэн энэ параметрийг бууруулдаг. Хэрэв таны зорилго бол кэшэд хадгалагдсан өгөгдлийн хэмжээг багасгах бөгөөд ингэснээр өгөгдлийг бүгдийг нь нэг дор биш харин аажмаар диск рүү бичих юм бол энэ параметрийг багасгах нь хамгийн үр дүнтэй арга юм. Өгөгдмөл утга нь их хэмжээний RAM, удаан дисктэй системүүдэд илүү тохиромжтой байдаг.

бохир_харьцаа: Тохируулах хамгийн чухал хоёр дахь параметр. Хэрэв энэ тохиргоог мэдэгдэхүйц бууруулбал диск рүү бичих шаардлагатай програмууд бүгд хаагдах болно.

бохир_хугацаа_центисек: Үүнийг багасгахыг хичээ, гэхдээ тийм ч их биш. Хуудсуудыг диск рүү бичихээс өмнө кэшэд зарцуулах хугацааг багасгах боломжийг танд олгоно, гэхдээ энэ нь диск рүү бичих дундаж хурдыг мэдэгдэхүйц бууруулна. үр ашиг багатай. Энэ нь ялангуяа удаан дисктэй системүүдэд мэдэгдэхүйц байх болно.

Параметрүүдийг тохируулах заавар

Файлд /etc/sysctl.confЖишээлбэл, бид орно:

Vm.бохир_арын_харьцаа = 10 vm.бохир_харьцаа = 40

Дараа нь бид кэш болон дискний өгөгдлийг синхрончилж, кэшийг цэвэрлэж, тохиргоог хадгална.

Синк хийх; echo 3 > /proc/sys/vm/drop_caches; sysctl -p

Гүйцэтгэлийн оновчлолын тухай ярихад Линукс системүүд, физик санах ой нь хамгийн чухал хүчин зүйл юм. Мэдээжийн хэрэг, Линукс нь санах ойн нөөцийн ашиглалтыг хянах олон сонголтыг санал болгодог. Янз бүрийн хэрэгслүүд нь хяналтын нарийвчлал (жишээ нь, системийн хэмжээнд, нэг процесс, нэг хэрэглэгч), интерфейс (жишээлбэл, график, тушаалын мөр, хараал) эсвэл үйлдлийн горим (жишээлбэл, интерактив, багц горим).

Энд байгаа програмуудын хэсэгчилсэн жагсаалт график интерфэйсЛинукс платформ дээр ашигласан болон сул санах ойг шалгахын тулд танд хангалттай сонголт хийх боломжтой.

1. /proc/meminfo

RAM ашиглалтыг шалгах хамгийн хялбар арга бол /proc/meminfo. Энэхүү динамикаар шинэчлэгдсэн виртуал файл нь санах ойтой холбоотой бусад хэрэгслүүд болох үнэгүй, дээд болон ps хэрэгслүүдийн дэлгэцийн мэдээллийн эх сурвалж юм. Боломжтой тооноос/ физик санах ойДиск рүү буцаан бичих буферийн хэмжээгээр /proc/meminfo-д ашиглалтын талаар мэдэхийг хүссэн бүх зүйл бий. системийн санах ой. Процессын санах ойн мэдээллийг мөн /proc/-ээс авах боломжтой. /statm ба /proc/ /төлөв

$ муур /proc/meminfo

2. орой

Atop команд нь ncurses-д суурилсан интерактив систем ба терминалын орчинд зориулсан процесс ажиглагч юм. Энэ нь системийн эх үүсвэрүүдийн (CPU, санах ой, сүлжээ, оролт/гаралт, цөм) динамикаар шинэчлэгдсэн хураангуй мэдээллийг харуулдаг. өндөр ачаалалсистемүүд. Энэ нь мөн процессуудыг (эсвэл хэрэглэгчдийг) хамгийн их нөөцийн хэрэглээний дарааллаар нь ангилах боломжтой системийн администратораль процесс эсвэл хэрэглэгч системийг ачаалах үүрэгтэйг хэлж чадна. Санах ойн статистикийн тайланд нийт/чөлөөт санах ой, кэш/буферт санах ой, санах ойн мэдээлэл орно. виртуал санах ой.

$ sudo дээр

3.үнэгүй

Үнэгүй команд нь /proc/meminfo-аас авсан санах ойн ашиглалтын тоймыг авах хурдан бөгөөд хялбар арга юм. Энэ нь нийт/боломжтой физик санах ой, системийн солилцоо, түүнчлэн цөм дэх ашигласан/чөлөөт буфер зайны агшин зуурын зургийг харуулдаг.

4. GNOME системийн хяналт

GNOME системийн монитор нь график програмаль нь харагдаж байна богино түүхашиглах системийн нөөц CPU, санах ой, своп зай, сүлжээнд зориулагдсан. Мөн CPU болон санах ойн ашиглалтыг хянах процессыг санал болгодог.

$gnome-систем-монитор

5.htop

htop команд нь санах ойн ашиглалтыг процессоор бодит цаг хугацаанд харуулдаг ncurses-д суурилсан интерактив процесс харагч юм. Энэ нь үндсэн санах ой (RSS) дахь процессын санах ойн ул мөр, санах ой дахь нийт програмын хэмжээ, номын сангийн хэмжээ, нийт хуудасны хэмжээ, бүх ажиллаж байгаа процессуудын бохир хуудасны хэмжээ (кэш дэх) зэргийг мэдээлэх боломжтой. Та бүх процессуудын (эрэмбэлэгдсэн) жагсаалтыг хэвтээ эсвэл босоо байдлаар гүйлгэж болно.

6. KDE системийн хяналт

GNOME ширээний компьютер нь GNOME системийн монитортой бол KDE ширээний компьютер нь KDE системийн дэлгэцтэй. Үүний функц нь GNOME хувилбартай голчлон төстэй, өөрөөр хэлбэл системийн нөөц ашиглалтын бодит цагийн түүх, түүнчлэн бие даасан процессуудын CPU/санах ойн зарцуулалтыг харуулдаг.

$ksysguard

7. memstat

Memstat хэрэгсэл нь ямар гүйцэтгэх боломжтой процесс(үүд) болон хуваалцсан номын сан виртуал санах ойг хэрэглэж байгааг тодорхойлоход хэрэгтэй. Процессын ID-г авснаар memstat нь тухайн процесстой холбоотой гүйцэтгэх код, өгөгдөл, хуваалцсан номын сангууд хэр их виртуал санах ойг ашигладаг болохыг харуулдаг.

$ memstat -p

8.нмон

nmon хэрэгсэл нь CPU, санах ой, дискний оролт гаралт, цөм зэргийг хянадаг ncurses дээр суурилсан системийн жишиг хэрэгсэл юм файлын системболон онлайн эх сурвалжууд. Санах ойн хэрэглээнд тулгуурлан нийт/чөлөөт санах ой, солих зай, буферт/кэштэй санах ой, ачаалагдсан/ачаалагдсан виртуал санах ойн статистик гэх мэт мэдээллийг бодит цаг хугацаанд харуулах боломжтой.

9.ps

ps команд нь бие даасан процессуудын санах ойн ашиглалтыг бодит цаг хугацаанд харуулах боломжтой. Харуулсан санах ойн ашиглалтын мэдээлэлд %MEM (ашигласан физик санах ойн хувь), VSZ (ашигласан виртуал санах ойн нийт хэмжээ), RSS (ашигласан физик санах ойн нийт хэмжээ) орно. Та "-сорт" сонголтыг ашиглан процессуудын жагсаалтыг эрэмбэлж болно. Жишээлбэл, RSS буурах дарааллаар эрэмбэлэхийн тулд:

$ ps aux --sort -rss

10. smem

Smem команд нь /proc-с байгаа мэдээлэлд үндэслэн янз бүрийн процессууд болон хэрэглэгчдийн физик санах ойн ашиглалтыг хэмжих боломжийг олгодог. Энэхүү хэрэгсэл нь Линукс процессуудын санах ойн ашиглалтыг зөв тооцоолохын тулд Пропорциональ багцын хэмжээ (PSS) хэмжигдэхүүнийг ашигладаг. Санах ойн ашиглалтын шинжилгээг график бар болон зүсмэл диаграм руу экспортлох боломжтой.

$ sudo smem --бялууны нэр -c "pss"

11. дээд

Дээд тушаал нь нөөцийн ашиглалттай холбоотой янз бүрийн үйл явцын статистикийн хамт ажиллаж байгаа процессуудын бодит цагийн хяналтыг санал болгодог. Санах ойтой холбоотой мэдээлэлд %MEM (ашигласан санах ойн хувь), VIRT (ашигласан виртуал санах ойн нийт хэмжээ), SWAP (солилцсон виртуал санах ойн хэмжээ), CODE (код гүйцэтгэхэд зориулагдсан физик санах ойн хэмжээ), DATA (физик санах ойн хэмжээ) орно. гүйцэтгэхэд зориулагдсан санах ойн хэмжээ). Та санах ойн ашиглалт эсвэл хэмжээнээс хамааран процессуудын жагсаалтыг ангилж болно.

12.vmstat

Vmstat командын мөрийн хэрэгсэл нь CPU, санах ой, тасалдал, дискний оролт гаралт зэрэг системийн янз бүрийн үйл ажиллагааны шууд болон дундаж статистик мэдээллийг харуулдаг. Санах ойн мэдээллийн эх сурвалж болохын хувьд энэ команд нь зөвхөн физик санах ойн хэрэглээг (жишээ нь: нийт/ашигласан санах ой болон санах ойн буфер/кэш) төдийгүй виртуал санах ойн статистикийг (жишээ нь, ачаалагдсан/хуудсан санах ой, хуудасдсан/ачагдсан) харуулдаг.

Vmstat командын мөрийн хэрэгсэл нь CPU, санах ой, тасалдал гэх мэт янз бүрийн системийн үйл ажиллагааны агшин зуурын болон дундаж статистик мэдээллийг харуулдаг. болон диск I/O. Санах ойн мэдээллийн хувьд команд нь зөвхөн физик санах ойн хэрэглээг (жишээ нь, нийт/ашигласан санах ой, буфер/кэш санах ой) төдийгүй виртуал санах ойн статистикийг (жишээ нь, санах ойн хуудас руу орох/гарах, оруулах/гарах) харуулдаг.

$ vmstat -s

© 2024 ermake.ru -- Компьютер засварын тухай - Мэдээллийн портал