一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Linux|Centos|Ubuntu|系統(tǒng)進(jìn)程|Fedora|注冊表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務(wù)器之家 - 服務(wù)器系統(tǒng) - Linux - 處理Page Cache緩存會(huì)影響系統(tǒng)性能?是真的嗎?

處理Page Cache緩存會(huì)影響系統(tǒng)性能?是真的嗎?

2024-01-02 17:04未知服務(wù)器之家 Linux

在我之前的文章中有粉絲提到內(nèi)存不足,需要頻繁清理系統(tǒng)緩存的問題,今天我們就來聊聊Page Cache相關(guān)的一系列問題。 怎么觀測Page Cache? 在Linux上直接查看Page Cache的方式有很多,包括free 、/proc/vmstat 命令等,它們的內(nèi)容其實(shí)是一

處理Page Cache緩存會(huì)影響系統(tǒng)性能?是真的嗎?

在我之前的文章中有粉絲提到內(nèi)存不足,需要頻繁清理系統(tǒng)緩存的問題,今天我們就來聊聊Page Cache相關(guān)的一系列問題。

怎么觀測Page Cache?

在Linux上直接查看Page Cache的方式有很多,包括free 、/proc/vmstat 命令等,它們的內(nèi)容其實(shí)是一致的,這些性能查詢工具的數(shù)據(jù)來源都是/proc/meminfo,今天我們就用最常用的free命令的輸出解釋下。

處理Page Cache緩存會(huì)影響系統(tǒng)性能?是真的嗎?

free命令輸出

處理Page Cache緩存會(huì)影響系統(tǒng)性能?是真的嗎?

meminfo信息

我們觀察free命令的輸出,在結(jié)合/proc/meminfo的結(jié)果,你可以發(fā)現(xiàn) buff/cache 包括下面這幾項(xiàng):

buff/cache = Buffers + Cached + SReclaimable。

從這個(gè)公式中,你能看到 free 命令中的 buff/cache 是由Buffers、Cached 和 SReclaimable 這三項(xiàng)組成的,它強(qiáng)調(diào)的是內(nèi)存的可回收性,也就是說,可以被回收的內(nèi)存會(huì)統(tǒng)計(jì)在這一項(xiàng)。關(guān)于buff/cache的介紹,我在前面的文章中有詳細(xì)講過。這里的SReclaimable是指可以被回收的內(nèi)核內(nèi)存,包括 dentry 和 inode 等。

Page Cache有什么用?

  • Buffer 是對磁盤數(shù)據(jù)的緩存,而 Cache 是文件數(shù)據(jù)的緩存,它們既會(huì)用在讀請求中,也會(huì)用在寫請求中(可以通過dd命令對磁盤和文件讀寫觀測緩存效果)。
  • 從寫的角度來說,不僅可以優(yōu)化磁盤和文件的寫入,對應(yīng)用程序也有好處,應(yīng)用程序可以在數(shù)據(jù)真正落盤前,就返回去做其他工作。
  • 從讀的角度來說,既可以加速讀取那些需要頻繁訪問的數(shù)據(jù),也降低了頻繁 I/O 對磁盤的壓力。

Page Cache操作不當(dāng)?shù)奈:?/h2>

如果你的業(yè)務(wù)對Page Cache比較敏感,比如說你的業(yè)務(wù)數(shù)據(jù)對延遲很敏感,或者再具體一點(diǎn),你的業(yè)務(wù)指標(biāo)對TP99(99 分位)要求較高,這種場景下,如果對Page Cache操作不當(dāng)會(huì)產(chǎn)生的問題。

手工誤操作Page Cache導(dǎo)致業(yè)務(wù)性能下降

我們知道,對于Page Cache而言,是可以通過drop_cache來清掉的,很多人在看到系統(tǒng)中存在非常多的Page Cache時(shí)會(huì)習(xí)慣使用drop_cache來清理它們。

處理Page Cache緩存會(huì)影響系統(tǒng)性能?是真的嗎?

于是這樣就引入了一個(gè)容易被我們忽略的問題:當(dāng)我們執(zhí)行 echo 2 來 drop slab 的時(shí)候,它也會(huì)把 Page Cache 給 drop 掉,業(yè)務(wù)性能產(chǎn)生了明顯的下降。

  • inode 是內(nèi)存中對磁盤文件的索引,進(jìn)程在查找或者讀取文件時(shí)就是通過 inode 來進(jìn)行操作的。
  • 進(jìn)程會(huì)通過inode來找到文件的地址空間(address_space),然后結(jié)合文件偏移(會(huì)轉(zhuǎn)換成 page index)來找具體的Page,inode被清理需要去磁盤讀取。

內(nèi)核機(jī)制引起Page Cache被回收導(dǎo)致業(yè)務(wù)性能下降

在內(nèi)存緊張的時(shí)候會(huì)觸發(fā)內(nèi)存回收,內(nèi)存回收會(huì)嘗試去回收reclaimable(可以被回收的)內(nèi)存,這部分內(nèi)存既包含 Page Cache 又包含 reclaimable kernel memory(比如 slab),我們可以通過/proc/vmstat 來觀察的內(nèi)核回收的事件。

grep inodesteal /proc/vmstat

處理Page Cache緩存會(huì)影響系統(tǒng)性能?是真的嗎?

vmstat信息

這個(gè)行為對應(yīng)的事件是 inodesteal,就是上面這兩個(gè)事件,其中:

  • kswapd_inodesteal:是指在 kswapd 回收的過程中,因?yàn)榛厥?inode 而釋放的 pagecache page 個(gè)數(shù)。
  • pginodesteal指kswapd 之外其他線程在回收過程中,因?yàn)榛厥?inode 而釋放的 pagecache page 個(gè)數(shù)。

如何避免Page Cache 被回收而引起的性能問題?

從應(yīng)用代碼層面來優(yōu)化

從應(yīng)用程序代碼層面來解決是相對比較徹底的方案,因?yàn)閼?yīng)用更清楚哪些 Page Cache 是重要的,哪些是不重要的,所以就可以明確地來對讀寫文件過程中產(chǎn)生的 Page Cache 區(qū)別對待。例如:

  • 對于重要的數(shù)據(jù),可以通過mlock(2)來保護(hù)它,防止被回收以及被 drop。
  • 對于不重要的數(shù)據(jù)(比如日志),那可以通過madvise(2)告訴內(nèi)核來立即釋放這些 Page Cache。

從系統(tǒng)層面來調(diào)整

在有些情況下,對應(yīng)用程序而言,修改源碼是件比較麻煩的事,如果可以不修改源碼來達(dá)到目的那就最好不過了。Linux 內(nèi)核同樣實(shí)現(xiàn)了這種不改應(yīng)用程序的源碼而從系統(tǒng)層面調(diào)整來保護(hù)重要數(shù)據(jù)的機(jī)制,這個(gè)機(jī)制就是memory cgroup,它提供了幾個(gè)內(nèi)存水位控制線 memory.{min, low, high, max}。

處理Page Cache緩存會(huì)影響系統(tǒng)性能?是真的嗎?

  • memory.max:這是指 memory cgroup 內(nèi)的進(jìn)程最多能夠分配的內(nèi)存,如果不設(shè)置的話,就默認(rèn)不做內(nèi)存大小的限制。
  • memory.high:如果設(shè)置了這一項(xiàng),當(dāng)memory cgroup內(nèi)進(jìn)程的內(nèi)存使用量超過了該值后就會(huì)立即被回收掉,所以這一項(xiàng)的目的是為了盡快的回收掉不活躍的Page Cache。
  • memory.low:這一項(xiàng)是用來保護(hù)重要數(shù)據(jù)的,當(dāng)memory cgroup內(nèi)進(jìn)程的內(nèi)存使用量低于了該值后,在內(nèi)存緊張觸發(fā)回收后就會(huì)先去回收不屬于該memory cgroup的Page Cache,等到其他的Page Cache都被回收掉后再來回收這些 Page Cache。
  • memory.min:這一項(xiàng)同樣是用來保護(hù)重要數(shù)據(jù)的,只不過與 memoy.low 有所不同的是,當(dāng) memory cgroup 內(nèi)進(jìn)程的內(nèi)存使用量低于該值后,即使其他不在該 memory cgroup 內(nèi)的 Page Cache 都被回收完了也不會(huì)去回收這些 Page Cache,可以理解為這是用來保護(hù)最高優(yōu)先級的數(shù)據(jù)的。

如果你想要保護(hù)你的Page Cache不被回收,你就可以考慮將你的業(yè)務(wù)進(jìn)程放在一個(gè)memory cgroup中,然后設(shè)置 memory.{min,low} 來進(jìn)行保護(hù);與之相反,如果你想要盡快釋放你的Page Cache,那你可以考慮設(shè)置memory.high 來及時(shí)的釋放掉不活躍的Page Cache。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99国产热| 岛国在线播放v片免费 | 99久久精品国产一区二区 | 手机看片一区二区 | 色哟呦 | 日本精品vide·ssex日本 | 80日本xxxxxxxxx96| 人人爽人人草 | caoporen97免费公开视频 | 四虎成人免费大片在线 | 973影院| 日韩欧美亚洲天堂 | 日韩国产欧美精品综合二区 | 二区三区在线观看 | 欧美亚洲国产精品久久第一页 | 欧美专区综合 | 4虎tv| 成人私人影院在线观看网址 | 香蕉人人超人人超碰超国产 | 新影音先锋男人色资源网 | 俺去啦最新官网 | uoco福利姬网站| 天美网站传媒入口网址 | 国内自拍网红在线自拍综合 | 午夜小福利| 毛片www| 教师波多野结衣在线播放 | 午夜无码片在线观看影院 | 日韩ab| 91亚洲一区二区在线观看不卡 | 美女靠逼动漫 | 87影院在线观看视频在线观看 | 亚洲精品有码在线观看 | 高考录取率1977-2021 | 精品欧美一区二区精品久久 | 国产做a爰片久久毛片 | 欧美人交性视频在线香蕉 | 大学第一次基本都没了 | 午夜精品久视频在线观看 | 吃瓜视频在线观看 | 亚洲天堂2013 |