用以檢查 Linux 內存使用的 5 個命令
Linux 操作系統包含大量工具,所有這些工具都可以幫助你管理系統。從簡單的文件和目錄工具到非常複雜的安全命令,在 Linux 中沒有多少是你做不了的。而且,儘管普通桌面用戶可能不需要在命令行熟悉這些工具,但對於 Linux 管理員來說,它們是必需的。為什麼?首先,你在某些時候不得不使用沒有 GUI 的 Linux 伺服器。其次,命令行工具通常比 GUI 替代工具提供更多的功能和靈活性。
確定內存使用情況是你可能需要的技能,尤其是某個應用程序變得異常和佔用系統內存時。當發生這種情況時,知道有多種工具可以幫助你進行故障排除十分方便的。或者,你可能需要收集有關 Linux 交換分區的信息,或者有關安裝的內存的詳細信息?對於這些也有相應的命令。讓我們深入了解各種 Linux 命令行工具,以幫助你檢查系統內存使用情況。這些工具並不是非常難以使用,在本文中,我將向你展示五種不同的方法來解決這個問題。
我將在 Ubuntu 18.04 伺服器平台上進行演示,但是你應該在你選擇的發行版中找到對應的所有命令。更妙的是,你不需要安裝任何東西(因為大多數這些工具都包含 Linux 系統中)。
話雖如此,讓我們開始工作吧。
top
我想從最常用的工具開始。top
命令提供正在運行的系統的實時動態視圖,它檢查每個進程的內存使用情況。這非常重要,因為你可以輕鬆地看到同一命令的多個示例消耗不同的內存量。雖然你無法在沒有顯示器的伺服器上看到這種情況,但是你已經注意到打開 Chrome 使你的系統速度變慢了。運行 top
命令以查看 Chrome 有多個進程在運行(每個選項卡一個 - 圖 1)。
![top](/data/attachment/album/201808/09/014538b1jbuywsbyzzwjpa.jpg "top")
圖1:top 命令中出現多個 Chrome 進程。
Chrome 並不是唯一顯示多個進程的應用。你看到圖 1 中的 Firefox 了嗎?那是 Firefox 的主進程,而 Web Content 進程是其打開的選項卡。在輸出的頂部,你將看到系統統計信息。在我的機器上(System76 Leopard Extreme),我總共有 16GB 可用 RAM,其中只有超過 10GB 的 RAM 正在使用中。然後,你可以整理該列表,查看每個進程使用的內存百分比。
top
最好的地方之一就是發現可能已經失控的服務的進程 ID 號(PID)。有了這些 PID,你可以對有問題的任務進行故障排除(或 kill
)。
如果你想讓 top
顯示更友好的內存信息,使用命令 top -o %MEM
,這會使 top
按進程所用內存對所有進程進行排序(圖 2)。
![top](/data/attachment/album/201808/09/014539kv40k6g9cq66ddkc.jpg "top")
圖 2:在 top 命令中按使用內存對進程排序
top
命令還為你提供有關使用了多少交換空間的實時更新。
free
然而有時候,top
命令可能不能滿足你的需求。你可能只需要查看系統的可用和已用內存。對此,Linux 還有 free
命令。free
命令顯示:
- 可用和已使用的物理內存總量
- 系統中交換內存的總量
- 內核使用的緩衝區和緩存
在終端窗口中,輸入 free
命令。它的輸出不是實時的,相反,你將獲得的是當前空閑和已用內存的即時快照(圖 3)。
![free](/data/attachment/album/201808/09/014539wzj67qqyrn4k6d86.jpg "free")
圖 3 :free 命令的輸出簡單明了。
當然,你可以通過添加 -m
選項來讓 free
顯示得更友好一點,就像這樣:free -m
。這將顯示內存的使用情況,以 MB 為單位(圖 4)。
![free](/data/attachment/album/201808/09/014539x3exhjm33jwwizmq.jpg "free")
圖 4:free 命令以一種更易於閱讀的形式輸出。
當然,如果你的系統是很新的,你將希望使用 -g
選項(以 GB 為單位),比如 free -g
。
如果你需要知道內存總量,你可以添加 -t
選項,比如:free -mt
。這將簡單地計算每列中的內存總量(圖 5)。
![total](/data/attachment/album/201808/09/014540uwm3bldd3ycdicx2.jpg "total")
圖 5:為你提供空閑的內存列。
vmstat
另一個非常方便的工具是 vmstat
。這個特殊的命令是一個報告虛擬內存統計信息的小技巧。vmstat
命令將報告關於:
- 進程
- 內存
- 分頁
- 阻塞 IO
- 中斷
- 磁碟
- CPU
使用 vmstat
的最佳方法是使用 -s
選項,如 vmstat -s
。這將在單列中報告統計信息(這比默認報告更容易閱讀)。vmstat
命令將提供比你需要的更多的信息(圖 6),但更多的總是更好的(在這種情況下)。
![vmstat](/data/attachment/album/201808/09/014540ibvpe83xoxwed85m.jpg "vmstat")
圖 6:使用 vmstat 命令來檢查內存使用情況。
dmidecode
如果你想找到關於已安裝的系統內存的詳細信息,該怎麼辦?為此,你可以使用 dmidecode
命令。這個特殊的工具是 DMI 表解碼器,它將系統的 DMI 表內容轉儲成人類可讀的格式。如果你不清楚 DMI 表是什麼,那麼可以這樣說,它可以用來描述系統的構成(以及系統的演變)。
要運行 dmidecode
命令,你需要 sudo
許可權。因此輸入命令 sudo dmidecode -t 17
。該命令的輸出(圖 7)可能很長,因為它顯示所有內存類型設備的信息。因此,如果你無法上下滾動,則可能需要將該命令的輸出發送到一個文件中,比如:sudo dmidecode -t 17> dmi_infoI
,或將其傳遞給 less
命令,如 sudo dmidecode | less
。
![dmidecode](/data/attachment/album/201808/09/014541dur591hh2qqdwg6u.jpg "dmidecode")
圖 7:dmidecode 命令的輸出。
/proc/meminfo
你可能會問自己:「這些命令從哪裡獲取這些信息?」在某些情況下,它們從 /proc/meminfo
文件中獲取。猜到了嗎?你可以使用命令 less /proc/meminfo
直接讀取該文件。通過使用 less
命令,你可以在長長的輸出中向上和向下滾動,以準確找到你需要的內容(圖 8)。
![/proc/meminfo](/data/attachment/album/201808/09/014541w1m5puy0hmimrvzz.jpg "/proc/meminfo")
圖 8:less /proc/meminfo 命令的輸出。
關於 /proc/meminfo
你應該知道:這不是一個真實的文件。相反 /proc/meminfo
是一個虛擬文件,包含有關係統的實時動態信息。特別是,你需要檢查以下值:
- 全部內存(
MemTotal
) - 空閑內存(
MemFree
) - 可用內存(
MemAvailable
) - 緩衝區(
Buffers
) - 文件緩存(
Cached
) - 交換緩存(
SwapCached
) - 全部交換區(
SwapTotal
) - 空閑交換區(
SwapFree
)
如果你想使用 /proc/meminfo
,你可以連接 egrep 命令使用它:egrep --color'Mem | Cache | Swap'/proc/meminfo
。這將生成一個易於閱讀的列表,其中包含 Mem
、 Cache
和 Swap
等內容的條目將是彩色的(圖 9)。
![/proc/meminfo](/data/attachment/album/201808/09/014541wbmp3p8hdo5nzzbh.jpg "/proc/meminfo")
圖 9:讓 /proc/meminfo 更容易閱讀。
繼續學習
你要做的第一件事就是閱讀每個命令的手冊頁(例如 man top
、man free
、man vmstat
、man dmidecode
)。從命令的手冊頁開始,對於如何在 Linux 上使用一個工具,它總是一個很好的學習方法。
通過 Linux 基金會和 edX 的免費 「Linux 簡介」課程了解有關 Linux 的更多知識。
via: https://www.linux.com/learn/5-commands-checking-memory-usage-linux
作者:Jack Wallen 選題:lujun9972 譯者:MjSeven 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive