Linux內存管理神器:smem工具
大家好,我是良許。今天給大家分享一款 Linux 系統里的內存管理神器:smem 。smem 是Linux系統上的一款可以生成多種內存耗用報告的命令行工具。與現有工具不一樣的是 smem 可以報告 PSS【Proportional Set Size(按比例占用大小)】,這是一種更有意義的指標??梢院饬刻摂M內存系統的庫和應用程序所占用的內存數量。由于大部分的物理內存通常在多個應用程序之間共享,名為駐留集大小(RSS)的這個標準的內存耗用衡量指標會大大高估內存耗用情況。PSS這個參數而是衡量了每個應用程序在每個共享內存區中的「公平分配」,給出了一個切合實際的衡量指標。
1. 安裝 smem 工具
如果你使用的是 Fedora 19 以上系統, smem 默認在存儲庫中,因此你可以使用 yum 來安裝它:
$ sudo yum install smem
對于 Ubuntu 用戶,可以使用 apt-get 命令來安裝 smem :
$ sudo apt-get install smem
如果無法正常安裝的話,可以下載它的源碼直接安裝,地址為:https://www.selenic.com/smem/download/
2. smem 工具常見用法
默認情況下, smem 將顯示每個正在運行的進程及所使用的內存。在這里,你可以留意 RSS 相對于 USS 和 PSS 的大小,可以看到它明顯高于另外二者。
$ smem
此外, smem 還可顯示每個庫所使用的內存。這個結果比較長,可能需要耗費一些時間,取決于你的系統。
$ smem -m
這個命令產生的結果太多了,如果我們想要查看特定應用程序使用內存情況,例如 Firefox,那么我們可以配合 grep 命令使用,同時使用 -p 選項以百分比形式查看內存使用情況。
$ smem -m -p | grep firefox
smem 命令還可以顯示每個用戶的內存使用情況,需要使用 -u 選項:
$ smem -u -p
你還可以使用 -w 選項查看系統內存使用情況:
$ smem -w -p
3. 結果可視化輸出
顯示數字畢竟不直觀,我們還可以使用 smem 生成圖形圖表來顯示內存使用情況,一目了然。要達到這個目的,我們需要使用到除了不能生孩子啥都可以干的 Python 。但光有 Python 還不行,還需要安裝用于生成圖表的 matplotlib 庫。Fedora 用戶可以通過運行以下命令來安裝它:
$ sudo yum install python-matplotlib
Ubuntu 用戶可以通過運行下面命令獲得它:
$ sudo apt-get install python-matplotlib
庫安裝之后,現在就可以以條形圖或餅圖的形式將獲得的內存使用情況以可視化表示。
3.1 餅形圖
使用 smem 以餅圖的形式查看內存使用情況,需要加上 --pie 選項,如下所示:
$ smem --pie name -s pss
命令運行之后將生成一個餅圖。請注意,這條命令里我們還加了 -s pss ,意思是顯示 PSS 的內存使用情況。要獲取 USS 和 RSS 的餅圖,只需將命令中的 pss 替換為 uss 或 rss 即可。
從兩個餅圖中,可以看到 RSS 報告還有 41.74% 的未使用內存,而 PSS 報告有 53.02% 的未使用內存。可以看出來,RSS 顯示的可用內存偏小,但實際還有很充足的內存空間。
3.2 柱狀圖
smem 的另一個很酷的特性是以柱狀圖的形式生成輸出。有了這個功能,你可以一次性查看 USS、PSS 和 RSS 報告的內存使用情況。要實現這個功能,需要加上 --bar 選項:
$ smem --bar pid -c "pss uss rss"
上面的命令將給出帶有進程 ID 號的內存使用情況的輸出結果。如果想要查看進程的名稱,可以將 pid 替換為 name 即可。命令運行之后,可以生成如下圖所示的條柱狀圖。