echo N > /proc/sys/vm/drop_caches , 當(dāng)N數(shù)值不同時(shí)绢彤,free –m存在差異
1.1、echo寫(xiě)入數(shù)值之前—free-m內(nèi)容
首先查看/proc/sys/vm/drop_caches的默認(rèn)值,以便可以修改回來(lái)
然后free-m查看此時(shí)內(nèi)存使用情況济瓢,對(duì)于各字段含義,可以參考:
第一類(lèi)單位參數(shù):
1) -b, –bytes, 以Byte為單位顯示內(nèi)存使用情況
2) -k, –kilo坡贺, 以KB為單位, 這也是默認(rèn)值
3) -m, –mega箱舞, 以MB為單位顯示內(nèi)容使用情況
4) -g, –giga遍坟, 以GB為單位顯示內(nèi)存使用情況
第二類(lèi)參數(shù):
1)、 -h, –human晴股, 自動(dòng)將數(shù)值轉(zhuǎn)換為人類(lèi)易讀形式
2)愿伴、 -c, –count, 展示結(jié)果count次电湘,需與-s配合使用
3)隔节、 -s, –seconds, 動(dòng)態(tài)刷新內(nèi)存使用情況的間隔
free -m各字段含義
第一部分Mem行:
========================
total 內(nèi)存總數(shù): 3865M
used 已經(jīng)使用的內(nèi)存數(shù): 1545M
free 空閑的內(nèi)存數(shù): 2320M
shared 多個(gè)進(jìn)程共享的內(nèi)存總額 196M
buffers Buffer 緩存內(nèi)存數(shù): 176M
cached Page 緩存內(nèi)存數(shù):569M
關(guān)系:total (3865M) = used(1545M) + free(2320M)
第二部分(-/+ buffers/cache):
========================
(-buffers/cache) used內(nèi)存數(shù):798M
(指的第一部分Mem行中的used – buffers – cached)
即為1545 – 176 – 569 = 800 取整時(shí)計(jì)算差異 2M
(+buffers/cache) free內(nèi)存數(shù): 3066M
(指的第一部分Mem行中的free + buffers + cached)
即為2320 + 176 + 569 = 3065 取整時(shí)計(jì)算差異 1M
第三部分是指交換分區(qū)
========================
當(dāng)系統(tǒng)的物理內(nèi)存不夠用的時(shí)候寂呛,就需要將物理內(nèi)存中的一部分空間釋放出來(lái)怎诫,以供當(dāng)前運(yùn)行的程序使用。這些被釋放的進(jìn)程被臨時(shí)保存到Swap空間中贷痪,等到那些程序要運(yùn)行時(shí)幻妓,再?gòu)腟wap分區(qū)中恢復(fù)保存的數(shù)據(jù)到內(nèi)存中。這樣劫拢,系統(tǒng)總是在物理內(nèi)存不夠時(shí)涌哲,才進(jìn)行Swap交換胖缤。所以swap分區(qū)不被占用或者占用很少,說(shuō)明現(xiàn)在系統(tǒng)內(nèi)存夠用阀圾,運(yùn)行還算良好哪廓,不會(huì)影響系統(tǒng)運(yùn)行
執(zhí)行echo 1 > /proc/sys/vm/drop_caches, 其中綠色框是標(biāo)記發(fā)生改變的部分初烘,由于buffers 和 cached數(shù)值變化涡真,第一行free和used均發(fā)生變化
執(zhí)行echo 2 > /proc/sys/vm/drop_caches, 其中綠色框是標(biāo)記發(fā)生改變的部分肾筐,這次僅有buffers由0變?yōu)?哆料,cached基本沒(méi)有變化
執(zhí)行echo 3 > /proc/sys/vm/drop_caches, 這次基本上吗铐,和寫(xiě)入2區(qū)別不大东亦,沒(méi)有什么變化
執(zhí)行echo N > /proc/sys/vm/drop_caches,再free –m查看內(nèi)存使用情況唬渗,輸入不同的N值典阵,free –m內(nèi)存中緩存buffers會(huì)有差異,現(xiàn)在我們就是要解釋/proc/sys/vm镊逝、drop_caches壮啊, 這個(gè)文件到底是什么?另外可以寫(xiě)入哪些數(shù)值撑蒜,具體適用于什么場(chǎng)景
查看linux內(nèi)核文檔歹啼,可以得到以下信息:
可以看出,/proc/sys是一個(gè)虛擬文件系統(tǒng)座菠,可以通過(guò)對(duì)它的讀寫(xiě)操作做為與kernel實(shí)體間進(jìn)行通信的一種手段狸眼。也就是說(shuō)可以通過(guò)修改/proc中的文件,來(lái)對(duì)當(dāng)前kernel的行為做出調(diào)整浴滴。那么我們可以通過(guò)調(diào)整/proc/sys/vm/drop_caches來(lái)釋放內(nèi)存拓萌。其默認(rèn)數(shù)值為0.
向/proc/sys/vm/drop_caches中寫(xiě)入內(nèi)容,會(huì)清理緩存巡莹。建議先執(zhí)行sync(sync 命令將所有未寫(xiě)的系統(tǒng)緩沖區(qū)寫(xiě)到磁盤(pán)中司志,包含已修改的 i-node甜紫、已延遲的塊 I/O 和讀寫(xiě)映射文件)降宅。執(zhí)行echo 1、2囚霸、3 至 /proc/sys/vm/drop_caches, 達(dá)到不同的清理目的
使用建議
如果因?yàn)槭菓?yīng)用有像內(nèi)存泄露腰根、溢出的問(wèn)題,從swap的使用情況是可以比較快速可以判斷的拓型,但free上面反而比較難查看额嘿。相反瘸恼,如果在這個(gè)時(shí)候,我們告訴用戶(hù)册养,修改系統(tǒng)的一個(gè)值东帅,“可以”釋放內(nèi)存,free就大了球拦。用戶(hù)會(huì)怎么想靠闭?不會(huì)覺(jué)得操作系統(tǒng)“有問(wèn)題”嗎?所以說(shuō)坎炼,既然核心是可以快速清空buffer或cache愧膀,也不難做到(這從上面的操作中可以明顯看到),但核心并沒(méi)有這樣做(默認(rèn)值是0)谣光,我們就不應(yīng)該隨便去改變它檩淋。
??一般情況下,應(yīng)用在系統(tǒng)上穩(wěn)定運(yùn)行了萄金,free值也會(huì)保持在一個(gè)穩(wěn)定值的蟀悦,雖然看上去可能比較小。當(dāng)發(fā)生內(nèi)存不足捡絮、應(yīng)用獲取不到可用內(nèi)存熬芜、OOM錯(cuò)誤等問(wèn)題時(shí),還是更應(yīng)該去分析應(yīng)用方面的原因福稳,如用戶(hù)量太大導(dǎo)致內(nèi)存不足涎拉、發(fā)生應(yīng)用內(nèi)存溢出等情況,否則的圆,清空buffer鼓拧,強(qiáng)制騰出free的大小,可能只是把問(wèn)題給暫時(shí)屏蔽了越妈。
??排除內(nèi)存不足的情況外季俩,除非是在軟件開(kāi)發(fā)階段,需要臨時(shí)清掉buffer梅掠,以判斷應(yīng)用的內(nèi)存使用情況酌住;或應(yīng)用已經(jīng)不再提供支持,即使應(yīng)用對(duì)內(nèi)存的時(shí)候確實(shí)有問(wèn)題阎抒,而且無(wú)法避免的情況下酪我,才考慮定時(shí)清空buffer。(可惜且叁,這樣的應(yīng)用通常都是運(yùn)行在老的操作系統(tǒng)版本上都哭,上面的操作也解決不了)