一文掌握 Linux 效能分析之記憶體篇

2022-02-03 22:09:42 字數 2473 閱讀 1284

前面我們已經學習了 cpu 篇,這篇來看下記憶體篇。

同樣在分析記憶體之前,我們得知到怎麼檢視系統記憶體資訊,有以下幾種方法。

這個檔案記錄著比較詳細的記憶體配置資訊,使用cat /proc/meminfo檢視。

我們比較關心的是下面幾個字段:

上面資訊沒有 memused 的值,雖然可以用現有的值大致估算出來,但是我們想一步到位,就用下面的 free 命令。

這個命令估計用的人就多了(我一般都是用這個命令)。

這裡存在乙個計算公式:

memtotal = used + free + buff/cache(單位 k)
幾個欄位和上面/proc/meminfo的字段是對應的。還有個shared字段,這個是多程序的共享記憶體空間,不常用。

我們注意到 free 很小,buff/cache 卻很大,這是 linux 的記憶體設計決定的,linux 的想法是記憶體閒著反正也是閒著,不如拿出來做系統快取和緩衝區,提高資料讀寫的速率。但是當系統記憶體不足時,buff/cache 會讓出部分來,非常靈活的操作。

要看比較直觀的值,可以加 -h 引數:

同樣可以使用這個命令,對於記憶體,可以使用dmidecode -t memory檢視:

這個命令也是非常常用了。但對於記憶體,顯示資訊有限。它更多是用於進行系統全域性分析和 cpu 分析。詳細可以看 cpu 分析一文。

最常用的兩個命令 ps 和 top,雖然很簡單的兩個命令,但還是有不少學問的。

top 命令執行時預設是按照 cpu 利用率進行排序的,如果要按照記憶體排序,該怎麼操作呢?兩種方法,一種直接按 「m」(相應的按 「p」 是 cpu),另外一種是在鍵入 top 之後,按下 「f」,然後選擇要排序的字段,再按下 「s」 確認即可。

可以看到,我按照 「%mem」 排序的結果。這個結果對於檢視系統占用記憶體較多的哪些程序是比較有用的。

ps 同樣可以檢視程序占用記憶體情況,一般常用來檢視 top n 程序占用記憶體情況,如:

ps aux --sort=rss | head -n,表示按 rss 排序,取 top n。

這裡也關注三個字段:

這個命令用於檢視程序的記憶體映像資訊,能夠檢視程序在哪些地方用了多少記憶體。 常用pmap -x pid來檢視。

可以看到該程序記憶體被哪些庫、哪些檔案所占用,據此我們定位程式對記憶體的使用。

幾個字段介紹一下:

kbytes:占用記憶體的位元組數。

rss:實際占用記憶體大小。

dirty:髒頁大小。

最後的 total 為統計的總值。我們可以使用pmap -x pid | tail -1這樣只顯示最後一行,迴圈顯示最後一行,達到監控該程序的目的。使用:

while true; do pmap -x pid | tail -1; sleep 1; done
通過以上手段,我們基本上就能定位記憶體問題所在了,究竟是記憶體太小,還是程序占用記憶體太多,有哪些程序占用較多,這些程序又究竟有哪些地方占用較多,這些問題通過以上方法都能解決。

最後簡單總結下,以上不少工具可能有人會犯選擇困難症了。對於我來說,檢視系統記憶體用 free -h,分析程序記憶體占用用 ps 或者 top(首選 ps),深入分析選擇 pmap,就醬。

參考:linux下檢視記憶體使用情況的多種方法

一文掌握 Linux 效能分析之 CPU 篇

平常工作會涉及到一些 linux 效能分析的問題,因此決定總結一下常用的一些效能分析手段,僅供參考。說到效能分析,基本上就是 cpu 記憶體 磁碟 io 以及網路這幾個部分,本文先來看 cpu 這個部分。cpu基礎資訊 進行效能分析之前,首先得知道 cpu 有哪些資訊,可以通過以下方法檢視 cpu ...

一文掌握 TensorFlow 基礎

在後面的課程中我們將主要使用 tensorflow 來實現各種模型的應用,所以在本節我們先來看一下 tensorflow 的基礎知識點。tensorflow 是乙個深度學習庫,由 google 開源,可以對定義在 tensor 張量 上的函式自動求導。tensor 張量 意味著 n 維陣列,flow...

必備!一文掌握Wordpress外掛程式

什麼是外掛程式?wordpress是乙個非常強大的建站系統,而在我們建站的過程中,外掛程式的使用必不可少。外掛程式是wordpress功能的擴充套件,也是wordpress得以獨步天下的 殺手鐗 其外掛程式實現了名副其實的 即插即用 全球有超過100萬的wordpress外掛程式,涵蓋電商 表單 郵...