tft每日頭條

 > 生活

 > cache大小與cache存取時間的關系

cache大小與cache存取時間的關系

生活 更新时间:2025-01-10 14:28:20

cache大小與cache存取時間的關系?"free -m" 命令的輸出結果中的 Cache 是什麼?,我來為大家科普一下關于cache大小與cache存取時間的關系?下面希望有你要的答案,我們一起來看看吧!

cache大小與cache存取時間的關系(free-m中的cache是什麼為什麼會占用那麼高)1

cache大小與cache存取時間的關系

環境
  • 紅帽企業 linux(所有版本)
  • JBoss 企業應用程序平台 (EAP) - 所有版本
Issue
  • 什麼是Cache在free -m輸出以及為什麼内存利用率高cache?
  • 如何通過分析 Heap 創建新的 JBoss 服務器實例所需的内存容量freeJBoss 中的命令輸出,如果已經有一個 JBoss 實例在運行?
  • 為什麼緩存使用了大量内存?
  • 緩存中經常充分利用物理内存
解決

"free -m" 命令的輸出結果中的 Cache 是什麼?

它表示當前被 Page chche 占用的内存容量,即 RAM 容量。Page cache 是被放到 RAM 上的曾經讀或寫操作所用到的文件或實際數據的副本。

擁有緩存機制有什麼好處?當執行讀或者寫操作的時候,内核首先将所要的數據放到 RAM。

讀取操作: 去磁盤找到數據 --> 把數據從磁盤存到 RAM --> 執行讀操作

寫操作: - 去磁盤找到數據 --> 把數據從磁盤存到 RAM --> 執行寫操作 --> 把修改的數據複制到磁盤

  • 不論是訪問外部存儲還是本地存儲,總是慢于直接訪問 RAM,因為磁盤讀取速度慢于 RAM 的讀取速度。如果某文件持續地被讀取或者修改,訪問磁盤是一種資源消耗。在 Cache 的幫助下,文件會在 RAM 保存一段時間,這樣就不用每次都去磁盤讀或者修改數據。經過一段時間後,Cache 上的數據會被同步到磁盤。
  • 把文件存到 RAM 裡大大提高了處理速度,因為與從本地磁盤訪問文件相比,它減少了大量的文件訪問時間。這也間接地提高了計算機的整體性能。

下面的示例演示了緩存如何提高整體性能:

[root@sourcedb ~]# cat >aaa #寫入文件aaa adfa adfa adfa ^C [root@sourcedb ~]# [root@sourcedb ~]# cat aaa #查看内容 adfa adfa adfa [root@sourcedb ~]# sync [root@sourcedb ~]# echo 3 > /proc/sys/vm/drop_caches #清空cache 如果您系統的 IO 操作頻繁,我們不建議您使用這條命令。請不要在生産環境中使用以下命令。 [root@sourcedb ~]# time cat aaa adfa adfa adfa real 0m0.018s #實際為0.018s user 0m0.000s sys 0m0.006s [root@sourcedb ~]# time cat aaa adfa adfa adfa real 0m0.001s #實際為0.001s 從緩存中讀取速度明顯大于0.018 user 0m0.000s sys 0m0.001s 因此,隻要有空閑内存,内核将始終嘗試利用它來将所需文件保存為緩存。

如果沒有可用 RAM 并且新進程需要可用 RAM,會發生什麼情況? 當一個新的進程需要 RAM 的空頁時,内核會檢查 cache 是否有空頁,并且把 cache 裡的文件同步到本地磁盤,從而收回空頁,釋放 RAM 給新的進程

有關“free -m”命令輸出的詳細說明:-

# free -m total used free shared buffers cached Mem: 3753 3455 298 0 144 664 -/ buffers/cache: 2645 1107 <<-- Actual Free RAM Swap: 4095 75 4020

  • 上述實例中,RAM 内存總量為 3753 MB。其中 3455 MB 被占用,298 MB 為剩餘容量。
  • 在 "free -m" 輸出結果中,cache 和 buffers 也被算作實際占用的 RAM 容量,但這并不符合事實。
  • 在被占用的 3455 MB 内存中,一部分被用作 cache 或 buffer。如上所述,當沒有空餘的 RAM 容量分配給新進程時,就可以回收 cache 和 buffer 的内存。所以我們可以把 "Cache" 和 "buffer" 看作空餘 RAM。因此可以根據以下公式計算實際剩餘 RAM 的容量。
  • Actual Free RAM = "free" "buffers" "cached" = 298 144 664 = 1106 在 "free -m" 命令輸出的第二行的 "free" 值約為 1107。

為什麼 cache 要占用那麼多的内存?

  • 對于一個 Linux 虛拟内存管理器來說這是正常現象。為了理解為什麼在正常情況下cache内存那麼高,您必須先了解linux是如何處理 I/O的。當某用戶讀或者寫文件時,它實際上是修改主内存的副本。内核會在磁盤裡創建一個副本,必要時會對其修改。被這些副本所占用的内存就叫做 cached memory。
  • 當用戶進程發起讀或者寫操作時,就會消耗 cache 内存。内核會查找用戶正在操作的文件副本,如果沒有的話,它會在 cache 裡分配出一個新的頁面,并且從磁盤裡讀出相應的數據填充它。如果用戶隻是讀這個文件,這一頁會被标注成 "clean" cache 頁。然而,隻要用戶寫該文件,這一頁會被标注成 "dirty"。出現在 ps 裡被稱做 pdflush 的内核線程會定期被喚醒,并将所有标記為 dirty 的頁面複制到磁盤,然後把它們标記為 clean。注意該頁面隻能被重新标記為 clean,由于之後可能會對該文件做進一步的 IO 操作,該頁面被重新寫回時并不會被釋放。
  • 當内核需要内存時,cache 頁才會被釋放。我們沒有必要把 cache 頁轉換成空頁,因為從磁盤讀取 cache 頁可以加快 IO 速率,而且釋放一個 cache 頁和分配一個空頁一樣簡單,此外一個空頁對于系統執行也沒有任何作用。如果 cache 頁占滿了内存,當下一次内核需要内存時,它會簡單地逐出最近最少使用的 clean 頁并重新利用它們。
,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved