用以檢查L(zhǎng)inux內(nèi)存使用的5個(gè)命令
對(duì)于 Linux 管理員來(lái)說(shuō),檢查系統(tǒng)內(nèi)存用量是一個(gè)重要的技能。Jack 給出了解決這個(gè)問(wèn)題的五種不同方式。
Linux 操作系統(tǒng)包含大量工具,所有這些工具都可以幫助你管理系統(tǒng)。從簡(jiǎn)單的文件和目錄工具到非常復(fù)雜的安全命令,在 Linux 中沒(méi)有多少是你做不了的。而且,盡管普通桌面用戶(hù)可能不需要在命令行熟悉這些工具,但對(duì)于 Linux 管理員來(lái)說(shuō),它們是必需的。為什么?首先,你在某些時(shí)候不得不使用沒(méi)有 GUI 的 Linux 服務(wù)器。其次,命令行工具通常比 GUI 替代工具提供更多的功能和靈活性。
確定內(nèi)存使用情況是你可能需要的技能,尤其是某個(gè)應(yīng)用程序變得異常和占用系統(tǒng)內(nèi)存時(shí)。當(dāng)發(fā)生這種情況時(shí),知道有多種工具可以幫助你進(jìn)行故障排除十分方便的。或者,你可能需要收集有關(guān) Linux 交換分區(qū)的信息,或者有關(guān)安裝的內(nèi)存的詳細(xì)信息?對(duì)于這些也有相應(yīng)的命令。讓我們深入了解各種 Linux 命令行工具,以幫助你檢查系統(tǒng)內(nèi)存使用情況。這些工具并不是非常難以使用,在本文中,我將向你展示五種不同的方法來(lái)解決這個(gè)問(wèn)題。
我將在 Ubuntu 18.04 服務(wù)器平臺(tái)上進(jìn)行演示,但是你應(yīng)該在你選擇的發(fā)行版中找到對(duì)應(yīng)的所有命令。更妙的是,你不需要安裝任何東西(因?yàn)榇蠖鄶?shù)這些工具都包含 Linux 系統(tǒng)中)。
話(huà)雖如此,讓我們開(kāi)始工作吧。
top
我想從最常用的工具開(kāi)始。top
命令提供正在運(yùn)行的系統(tǒng)的實(shí)時(shí)動(dòng)態(tài)視圖,它檢查每個(gè)進(jìn)程的內(nèi)存使用情況。這非常重要,因?yàn)槟憧梢暂p松地看到同一命令的多個(gè)示例消耗不同的內(nèi)存量。雖然你無(wú)法在沒(méi)有顯示器的服務(wù)器上看到這種情況,但是你已經(jīng)注意到打開(kāi) Chrome 使你的系統(tǒng)速度變慢了。運(yùn)行 top
命令以查看 Chrome 有多個(gè)進(jìn)程在運(yùn)行(每個(gè)選項(xiàng)卡一個(gè) - 圖 1)。
圖1:top 命令中出現(xiàn)多個(gè) Chrome 進(jìn)程。
Chrome 并不是唯一顯示多個(gè)進(jìn)程的應(yīng)用。你看到圖 1 中的 Firefox 了嗎?那是 Firefox 的主進(jìn)程,而 Web Content 進(jìn)程是其打開(kāi)的選項(xiàng)卡。在輸出的頂部,你將看到系統(tǒng)統(tǒng)計(jì)信息。在我的機(jī)器上(System76 Leopard Extreme),我總共有 16GB 可用 RAM,其中只有超過(guò) 10GB 的 RAM 正在使用中。然后,你可以整理該列表,查看每個(gè)進(jìn)程使用的內(nèi)存百分比。
top
最好的地方之一就是發(fā)現(xiàn)可能已經(jīng)失控的服務(wù)的進(jìn)程 ID 號(hào)(PID)。有了這些 PID,你可以對(duì)有問(wèn)題的任務(wù)進(jìn)行故障排除(或 kill
)。
如果你想讓 top
顯示更友好的內(nèi)存信息,使用命令 top -o %MEM
,這會(huì)使 top
按進(jìn)程所用內(nèi)存對(duì)所有進(jìn)程進(jìn)行排序(圖 2)。
圖 2:在 top 命令中按使用內(nèi)存對(duì)進(jìn)程排序
top
命令還為你提供有關(guān)使用了多少交換空間的實(shí)時(shí)更新。
free
然而有時(shí)候,top
命令可能不能滿(mǎn)足你的需求。你可能只需要查看系統(tǒng)的可用和已用內(nèi)存。對(duì)此,Linux 還有 free
命令。free
命令顯示:
- 可用和已使用的物理內(nèi)存總量
- 系統(tǒng)中交換內(nèi)存的總量
- 內(nèi)核使用的緩沖區(qū)和緩存
在終端窗口中,輸入 free
命令。它的輸出不是實(shí)時(shí)的,相反,你將獲得的是當(dāng)前空閑和已用內(nèi)存的即時(shí)快照(圖 3)。
圖 3 :free 命令的輸出簡(jiǎn)單明了。
當(dāng)然,你可以通過(guò)添加 -m
選項(xiàng)來(lái)讓 free
顯示得更友好一點(diǎn),就像這樣:free -m
。這將顯示內(nèi)存的使用情況,以 MB 為單位(圖 4)。
圖 4:free 命令以一種更易于閱讀的形式輸出。
當(dāng)然,如果你的系統(tǒng)是很新的,你將希望使用 -g
選項(xiàng)(以 GB 為單位),比如 free -g
。
如果你需要知道內(nèi)存總量,你可以添加 -t
選項(xiàng),比如:free -mt
。這將簡(jiǎn)單地計(jì)算每列中的內(nèi)存總量(圖 5)。
圖 5:為你提供空閑的內(nèi)存列。
vmstat
另一個(gè)非常方便的工具是 vmstat
。這個(gè)特殊的命令是一個(gè)報(bào)告虛擬內(nèi)存統(tǒng)計(jì)信息的小技巧。vmstat
命令將報(bào)告關(guān)于:
- 進(jìn)程
- 內(nèi)存
- 分頁(yè)
- 阻塞 IO
- 中斷
- 磁盤(pán)
- CPU
使用 vmstat
的最佳方法是使用 -s
選項(xiàng),如 vmstat -s
。這將在單列中報(bào)告統(tǒng)計(jì)信息(這比默認(rèn)報(bào)告更容易閱讀)。vmstat
命令將提供比你需要的更多的信息(圖 6),但更多的總是更好的(在這種情況下)。
圖 6:使用 vmstat 命令來(lái)檢查內(nèi)存使用情況。
dmidecode
如果你想找到關(guān)于已安裝的系統(tǒng)內(nèi)存的詳細(xì)信息,該怎么辦?為此,你可以使用 dmidecode
命令。這個(gè)特殊的工具是 DMI 表解碼器,它將系統(tǒng)的 DMI 表內(nèi)容轉(zhuǎn)儲(chǔ)成人類(lèi)可讀的格式。如果你不清楚 DMI 表是什么,那么可以這樣說(shuō),它可以用來(lái)描述系統(tǒng)的構(gòu)成(以及系統(tǒng)的演變)。
要運(yùn)行 dmidecode
命令,你需要 sudo
權(quán)限。因此輸入命令 sudo dmidecode -t 17
。該命令的輸出(圖 7)可能很長(zhǎng),因?yàn)樗@示所有內(nèi)存類(lèi)型設(shè)備的信息。因此,如果你無(wú)法上下滾動(dòng),則可能需要將該命令的輸出發(fā)送到一個(gè)文件中,比如:sudo dmidecode -t 17> dmi_infoI
,或?qū)⑵鋫鬟f給 less
命令,如 sudo dmidecode | less
。
圖 7:dmidecode 命令的輸出。
/proc/meminfo
你可能會(huì)問(wèn)自己:“這些命令從哪里獲取這些信息?”在某些情況下,它們從 /proc/meminfo
文件中獲取。猜到了嗎?你可以使用命令 less /proc/meminfo
直接讀取該文件。通過(guò)使用 less
命令,你可以在長(zhǎng)長(zhǎng)的輸出中向上和向下滾動(dòng),以準(zhǔn)確找到你需要的內(nèi)容(圖 8)。
圖 8:less /proc/meminfo 命令的輸出。
關(guān)于 /proc/meminfo
你應(yīng)該知道:這不是一個(gè)真實(shí)的文件。相反 /proc/meminfo
是一個(gè)虛擬文件,包含有關(guān)系統(tǒng)的實(shí)時(shí)動(dòng)態(tài)信息。特別是,你需要檢查以下值:
- 全部?jī)?nèi)存(
MemTotal
) - 空閑內(nèi)存(
MemFree
) - 可用內(nèi)存(
MemAvailable
) - 緩沖區(qū)(
Buffers
) - 文件緩存(
Cached
) - 交換緩存(
SwapCached
) - 全部交換區(qū)(
SwapTotal
) - 空閑交換區(qū)(
SwapFree
)
如果你想使用 /proc/meminfo
,你可以連接 egrep 命令使用它:egrep --color'Mem | Cache | Swap'/proc/meminfo
。這將生成一個(gè)易于閱讀的列表,其中包含 Mem
、 Cache
和 Swap
等內(nèi)容的條目將是彩色的(圖 9)。
圖 9:讓 /proc/meminfo 更容易閱讀。
繼續(xù)學(xué)習(xí)
你要做的第一件事就是閱讀每個(gè)命令的手冊(cè)頁(yè)(例如 man top
、man free
、man vmstat
、man dmidecode
)。從命令的手冊(cè)頁(yè)開(kāi)始,對(duì)于如何在 Linux 上使用一個(gè)工具,它總是一個(gè)很好的學(xué)習(xí)方法。