linux系統資源監控之記憶體監控隨筆

2022-09-12 17:03:50 字數 2787 閱讀 2464

1、使用命令:sar -r(shell指令碼語句:memused=`sar -r | grep "**erage:" | awk -f" " ''`)

2、命令各輸出項(只介紹比較主要的幾個):

3、關於free -h的輸出項:

mem行(第二行)是記憶體的使用情況。

swap行(第三行)是交換空間的使用情況。

total列顯示系統總的可用物理記憶體和交換空間大小。

used列顯示已經被使用的物理記憶體和交換空間。

free列顯示還有多少物理記憶體和交換空間可用使用。

shared列顯示被共享使用的物理記憶體大小。

buff/cache列顯示被 buffer 和 cache 使用的物理記憶體大小。

**ailable列顯示還可以被應用程式使用的物理記憶體大小。

4、實際操作的經驗:

在實際監控系統時,取到的物理記憶體使用量往往比較嚇人($memused),如果伺服器記憶體不是巨大的,通常是85%或者90%以上,其實仔細觀察,往往是緩衝區/頁快取記憶體(buff/cache)占用了至少總量50%的物理記憶體,不用擔心,這些記憶體並沒有實際在使用,大部分還是空閒的,等kbmemfree非常小時,會釋放各應用程序使用。

5、容易引起人疑問的點(內容為網路資料,來自作者(哪是什麼大佬)):

先來提乙個問題: buffer 和 cache 應該是兩種型別的記憶體,但是 free 命令為什麼會把它們放在一起呢?要回答這個問題需要我們做些準備工作。讓我們先來搞清楚 buffer 與 cache 的含義。

buffer在作業系統中指 buffer cache, 中文一般翻譯為 "緩衝區"。要理解緩衝區,必須明確另外兩個概念:"扇區" 和 "塊"。扇區是裝置的最小定址單元,也叫 "硬扇區" 或 "裝置塊"。塊是作業系統中檔案系統的最小定址單元,也叫 "檔案塊" 或 "i/o 塊"。每個塊包含乙個或多個扇區,但大小不能超過乙個頁面,所以乙個頁可以容納乙個或多個記憶體中的塊。當乙個塊被調入記憶體時,它要儲存在乙個緩衝區中。每個緩衝區與乙個塊對應,它相當於是磁碟塊在記憶體中的表示(下圖來自網際網路):

注意,buffer cache 只有塊的概念而沒有檔案的概念,它只是把磁碟上的塊直接搬到記憶體中而不關心塊中究竟存放的是什麼格式的檔案。

cache在作業系統中指 page cache,中文一般翻譯為 "頁快取記憶體"。頁快取記憶體是核心實現的磁碟快取。它主要用來減少對磁碟的 i/o 操作。具體地講,是通過把磁碟中的資料快取到物理記憶體中,把對磁碟的訪問變為對物理記憶體的訪問。頁快取記憶體快取的是記憶體頁面。快取中的頁來自對普通檔案、塊裝置檔案(這個指的就是 buffer cache 呀)和記憶體對映檔案的讀寫

頁快取記憶體對普通檔案的快取我們可以這樣理解:當核心要讀乙個檔案(比如 /etc/hosts)時,它會先檢查這個檔案的資料是不是已經在頁快取記憶體中了。如果在,就放棄訪問磁碟,直接從記憶體中讀取。這個行為稱為快取命中。如果資料不在快取中,就是未命中快取,此時核心就要排程塊 i/o 操作從磁碟去讀取資料。然後核心將讀來的資料放入頁快取記憶體中。這種快取的目標是檔案系統可以識別的檔案(比如 /etc/hosts)。

頁快取記憶體對塊裝置檔案的快取就是我們在前面介紹的 buffer cahce。因為獨立的磁碟塊通過緩衝區也被存入了頁快取記憶體(緩衝區最終是由頁快取記憶體來承載的)。

到這裡我們應該搞清楚了:無論是緩衝區還是頁快取記憶體,它們的實現方式都是一樣的。緩衝區只不過是一種概念上比較特殊的頁快取記憶體罷了。

那麼為什麼 free 命令不直接稱為 cache 而非要寫成 buff/cache? 這是因為緩衝區和頁快取記憶體的實現並非天生就是統一的。在 linux 核心 2.4 中才將它們統一。更早的核心中有兩個獨立的磁碟快取:頁快取記憶體和緩衝區快取記憶體。前者快取頁面,後者快取緩衝區。當你知道了這些故事之後,輸出中列的名稱可能已經不再重要了。

在 free 命令的輸出中,有乙個 free 列,同時還有乙個 **ailable 列。這二者到底有何區別?

free 是真正尚未被使用的物理記憶體數量。至於 **ailable 就比較有意思了,它是從應用程式的角度看到的可用記憶體數量。linux 核心為了提公升磁碟操作的效能,會消耗一部分記憶體去快取磁碟資料,就是我們介紹的 buffer 和 cache。所以對於核心來說,buffer 和 cache 都屬於已經被使用的記憶體。當應用程式需要記憶體時,如果沒有足夠的 free 記憶體可以用,核心就會從 buffer 和 cache 中**記憶體來滿足應用程式的請求。所以從應用程式的角度來說,**ailable  = free + buffer + cache。請注意,這只是乙個很理想的計算方式,實際中的資料往往有較大的誤差。

swap space 是磁碟上的一塊區域,可以是乙個分割槽,也可以是乙個檔案。所以具體的實現可以是 swap 分割槽也可以是 swap 檔案。當系統物理記憶體吃緊時,linux 會將記憶體中不常訪問的資料儲存到 swap 上,這樣系統就有更多的物理記憶體為各個程序服務,而當系統需要訪問 swap 上儲存的內容時,再將 swap 上的資料載入到記憶體中,這就是常說的換出和換入。交換空間可以在一定程度上緩解記憶體不足的情況,但是它需要讀寫磁碟資料,所以效能不是很高。

如果系統的記憶體不足,則需要根據物理記憶體的大小來設定交換空間的大小。具體的策略網上有很豐富的資料,這裡筆者不再贅述。

其實 free 命令中的資訊都來自於 /proc/meminfo 檔案。/proc/meminfo 檔案包含了更多更原始的資訊,只是看起來不太直觀,有興趣的同學可以直接檢視這個檔案。

linux系統資源監控

如何檢視linux支援哪些命令 連按兩次tab鍵 top 作為乙個廣為人知的linux工具,top是大多數的類 unix 作業系統任務管理器。它可以顯示當前正在執行的程序的列表,使用者可以按照不同的條件對該列表進行排序。它主要顯示了系統程序對cpu和記憶體的使用狀況。top可以快速檢查是哪個或哪幾個...

Linux系統資源監控

安裝nmon rpm安裝包可以在這找到你的版本,點這 ubuntu 或 manjaro 用命令或自己找一下安裝包,這裡不提供包了 nmon實時監控 匯出監控檔案 nmon ft s 10 c 60 m root nmon 引數說明 f 監控結果以檔案形式輸出,預設機器名 日期.nmon格式 f 指定...

系統資源監控

系統資源監控 free 觀察記憶體使用情況 uname 查閱系統與核心相關資訊 s 系統核心名稱 r 核心版本 uptime 觀察系統啟動時間與負載 netstat 網路監察 vmstat 偵測系統資源變化 iftop 網路流量的監控 netsata 網路監控 netsata 選項 a 將目前系統上...