如何控制Linux清理cache機制

時間 2021-06-02 16:40:57

1樓:teawater

回答pagein的問題

應該是因為檔案頁面不像匿名頁做remap而是直接丟掉重新讀具體可見 compact_zone->migrate_pages解決另外把預讀大一點連續點減少點碎頁?

2樓:張曉雷

1 Linux下記憶體占用多的原因

當linux第一次讀取乙個檔案執行時,乙份放到一片記憶體中cache起來,另乙份放入執行程式的記憶體中,正常執行,當程式執行完,關閉了,cache中的那一分卻沒有釋放,第二次執行的時候,系統先看看在記憶體中是否有一地次執行時存起來的cache中的副本,如果有的話,直接從記憶體中讀取,那樣,速度就快多了。

說明這種情況的很典型的例子是啟動firefox,由於firefox程式很大,因此第一次讀取執行的時候很慢,尤其在速度不快的機器上,但是當你徹底關閉了firefox,ps看不到乙個firefox程序,第二次再啟動的時候就比第一次明顯快很多,這是由於這次系統是直接從cache中讀取的firefox來執行,並不是從磁碟上讀取的。

再有乙個例子:我們頻繁使用的ls命令等基本命令,你執行的時候根本看不到硬碟燈閃,因為這些常用的命令都是再第一次執行後就儲存在cache中的,以後就一直從記憶體中讀出來執行。

如果cache占用的記憶體過多了,影響正常執行程式需要的記憶體,那麼會釋放掉一部分cache記憶體,但是總量會保持乙個很高的值,所以,linux總是能最大限度的使用記憶體,就算加到16G,32G記憶體,也會隨著不斷的IO操作,記憶體的free值會慢慢減少到只有幾M,想要記憶體不發生這種情況,只有乙個辦法:把記憶體加到比硬碟大。

2 手動釋放方法

2.1 使用free檢視一下當前記憶體使用情況(可略過):

[root@*** ~]# free -m

total used free shared buffers cached

Mem512 488 230 57 157

-/+ buffers/cache: 273 238 Swap10550 10552.2 執行sync同步資料

[root@*** ~]# sync2.3 清理cache

[root@*** ~]#echo 3 > /proc/sys/vm/drop_caches2.4 drop_cache的詳細文件如下,以便查閱

Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.

To free pagecache:

* echo 1 > /proc/sys/vm/drop_caches

To free dentries and inodes:

* echo 2 > /proc/sys/vm/drop_caches

To free pagecache, dentries and inodes:

* echo 3 > /proc/sys/vm/drop_caches

As this is a non-destructive operation, and dirty objects are notfreeable, the user should run "sync" first in order to make sure allcached objects are freed.

This tunable was added in 2.6.16.

3樓:cyan Doser

cache是因為對帶檔案系統的介質進行讀寫引起的。是核心做的頁快取。可以通過vmtouch工具去定位是哪些檔案佔的cache,從而查到對應的服務程序。

行星如何清理軌道?

KVNM 不邀自來。事實上軌道週期精確全等的軌道在自然界是不存在的,天體軌道會因為天體非球性 其它天體攝動等複雜因素發生漂變。即便在某一瞬間剛好有理想的週期完全一樣的軌道,也會在億萬年的時間積累下變得不一樣,使得小天體有可能接近到行星附近。行星清空軌道也不一定需要 撞上 小天體。小天體在飛過行星附近...

如何清理廚房抹布?

王今 廚房抹布一般包括洗碗 擦檯面 擦灶台,與我們日常使用的食用器具接觸比較多,尤其需要注意抹布的清潔,我一般是用煮和暴曬的方法來清理抹布,再加上定期更換新抹布,來保持抹布的乾淨衛生 每次抹布使用完後都會將其洗乾淨並晾起來或掛起來,畢竟幹抹布更不利於細菌繁殖 每隔3 5幾天會對抹布消下毒,主要方式是...

怎麼在linux中控制程序對視訊記憶體 顯示卡核心占用(利用率)

cms42 首先眾所周知的,nice cpulimit和cgroups等等顯然沒有什麼幫助,docker更加。如果能修改源程式,這是一件很簡單的事情,因為Tensorflow Keras等主流框架都提供了相關的功能 如tf的gpu options.per process gpu memory fra...