linux下的缓存机制及清理buffer/cache/swap的方法梳理
1)緩存機(jī)制介紹
在Linux系統(tǒng)中,為了提高文件系統(tǒng)性能,內(nèi)核利用一部分物理內(nèi)存分配出緩沖區(qū),用于緩存系統(tǒng)操作和數(shù)據(jù)文件,當(dāng)內(nèi)核收到讀寫(xiě)的請(qǐng)求時(shí),內(nèi)核先去緩存區(qū)找是否有請(qǐng)求的數(shù)據(jù),有就直接返回,如果沒(méi)有則通過(guò)驅(qū)動(dòng)程序直接操作磁盤(pán)。
緩存機(jī)制優(yōu)點(diǎn):減少系統(tǒng)調(diào)用次數(shù),降低CPU上下文切換和磁盤(pán)訪問(wèn)頻率。
CPU上下文切換:CPU給每個(gè)進(jìn)程一定的服務(wù)時(shí)間,當(dāng)時(shí)間片用完后,內(nèi)核從正在運(yùn)行的進(jìn)程中收回處理器,同時(shí)把進(jìn)程當(dāng)前運(yùn)行狀態(tài)保存下來(lái),然后加載下一個(gè)任務(wù),這個(gè)過(guò)程叫做上下文切換。實(shí)質(zhì)上就是被終止運(yùn)行進(jìn)程與待運(yùn)行進(jìn)程的進(jìn)程切換。
2)查看緩存區(qū)及內(nèi)存使用情況
| 1 2 3 4 5 | [root@localhost ~]# free -m ?????????????total?????? used???????free?????shared??? buffers???? cached Mem:????????? 7866?????? 7725??????? 141???????? 19???????? 74?????? 6897 -/+ buffers/cache:??????? 752?????? 7113 Swap:??????? 16382???????? 32????? 16350 |
從上面的命令結(jié)果顯示中可以看出:內(nèi)存總共8G,已使用7725M,剩余141M,不少的人都是這么看的。
但其實(shí)這樣并不能作為實(shí)際的使用率。因?yàn)橛辛司彺鏅C(jī)制,具體算法如下:
空閑內(nèi)存=free(141)+buffers(74)+cached(6897)
已用內(nèi)存=total(7866)-空閑內(nèi)存
由此算出空閑內(nèi)存是7112M,已用內(nèi)存754M,這才是真正的使用率,也可參考-/+ buffers/cache這行信息也是內(nèi)存正確使用率。
3)緩存區(qū)分buffers和cached區(qū)別
內(nèi)核在保證系統(tǒng)能正常使用物理內(nèi)存和數(shù)據(jù)量讀寫(xiě)情況下來(lái)分配緩沖區(qū)大小。
buffers用來(lái)緩存metadata及pages,可以理解為系統(tǒng)緩存,例如,vi打開(kāi)一個(gè)文件。
cached是用來(lái)給文件做緩存,可以理解為數(shù)據(jù)塊緩存,例如,dd if=/dev/zero of=/tmp/test count=1 bs=1G 測(cè)試寫(xiě)入一個(gè)文件,就會(huì)被緩存到緩沖區(qū)中,當(dāng)下一次再執(zhí)行這個(gè)測(cè)試命令時(shí),寫(xiě)入速度會(huì)明顯很快。
4)Swap用途
Swap意思是交換分區(qū),通常我們說(shuō)的虛擬內(nèi)存,是從硬盤(pán)中劃分出的一個(gè)分區(qū)。當(dāng)物理內(nèi)存不夠用的時(shí)候,內(nèi)核就會(huì)釋放緩存區(qū)(buffers/cache)里一些長(zhǎng)時(shí)間不用的程序,然后將這些程序臨時(shí)放到Swap中,也就是說(shuō)如果物理內(nèi)存和緩存區(qū)內(nèi)存不夠用的時(shí)候,才會(huì)用到Swap。
swap清理:
swapoff -a && swapon -a
注意:這樣清理有個(gè)前提條件,空閑的內(nèi)存必須比已經(jīng)使用的swap空間大
5)釋放緩存區(qū)內(nèi)存的方法
? ??a)清理pagecache(頁(yè)面緩存)
| 1 | # echo 1 > /proc/sys/vm/drop_caches???? 或者 # sysctl -w vm.drop_caches=1 |
?b)清理dentries(目錄緩存)和inodes
| 1 | # echo 2 > /proc/sys/vm/drop_caches???? 或者 # sysctl -w vm.drop_caches=2 |
?c)清理pagecache、dentries和inodes
| 1 | # echo 3 > /proc/sys/vm/drop_caches???? 或者 # sysctl -w vm.drop_caches=3 |
上面三種方式都是臨時(shí)釋放緩存的方法,要想永久釋放緩存,需要在/etc/sysctl.conf文件中配置:vm.drop_caches=1/2/3,然后sysctl -p生效即可!
? ? 另外,可以使用sync命令來(lái)清理文件系統(tǒng)緩存,還會(huì)清理僵尸(zombie)對(duì)象和它們占用的內(nèi)存
| 1 | # sync |
轉(zhuǎn)載于:https://www.cnblogs.com/beyang/p/8393707.html
總結(jié)
以上是生活随笔為你收集整理的linux下的缓存机制及清理buffer/cache/swap的方法梳理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 设置等待时间
- 下一篇: Linux之grep命令详解