題 關於Linux的內存緩存


我正在運行一個python腳本來做一些統計,實際使用的內存很低,大約10%。沒有其他進程花費更多的內存。但是,當我使用 free -m 並且它表明已經使用了近95%的內存。重點是我的腳本應該從文件中進行大量讀取,所以我想知道是否有任何Linux內存緩存機制導致了這個問題?echo 1 >> /proc/sys/vm/drop_caches 工作,但它似乎手動。如何降低內存成本,並不會對讀取文件產生不良影響?


4
2017-09-28 07:05


起源




答案:


Linux內核自動將文件緩存在內存中以提高效率。這不是一件壞事。跑步時 free -m 您將在右側看到緩存中使用的內存量。如果應用程序需要內存,內核將釋放一些緩存。你不應該自己嘗試管理它。


7
2017-09-28 07:17





我不認為你這裡有實際問題。

你為什麼要關心使用多少總內存?它傷害了什麼嗎?

Linux嘗試盡可能高效地使用您的內存。如果你有大量的可用內存,並且你正在閱讀大量文件,那麼它將使用空閒內存來緩存這些文件。如果你有大量的活動內存,它將使用更少的內存來緩存。這就是它應該工作的方式。如果您根本不想使用內存,請將芯片從計算機中取出。

有一些不常見的情況,許多緩存可能是壞的。也許爆發的讀取總是在內存分配突發之前發生。也許某些關於你的具體情況意味著沒有可能的好處,你需要擠出最後0.1%的性能成本。也許你是在一個使用有限生命週期的RAM的嵌入式系統上。如果你有這種情況,請告訴我們它是什麼。


5
2017-09-28 07:14



好吧,實際上問題是腳本不佔用太多內存,接近10%,而我的機器什麼也沒做。當我將數據讀入內存時,python得到一個MemoryError,表明沒有足夠的內存存在。 - cheneydeng