物理內(nèi)存不足對(duì)Linux桌面系統(tǒng)和服務(wù)器系統(tǒng)的性能影響都很大。當(dāng)你的計(jì)算機(jī)變慢時(shí),要做的第一件事就是釋放內(nèi)存。尤其是在多用戶環(huán)境以及執(zhí)行關(guān)鍵任務(wù)的服務(wù)器環(huán)境下,內(nèi)存消耗會(huì)變得更加關(guān)鍵,因?yàn)槎鄠€(gè)用戶和應(yīng)用線程會(huì)同時(shí)競(jìng)爭(zhēng)更多的內(nèi)存空間。
如果要監(jiān)測(cè)系統(tǒng)內(nèi)各種資源的使用情況(比如說(shuō)CPU或內(nèi)存),圖形化顯示是一種高效的方法,通過(guò)圖形界面可以快速分析各用戶和進(jìn)程的資源消耗情況。本教程將給大家介紹在linux下圖形化分析內(nèi)存使用情況的方法,使用到命令行工具是smem.
物理內(nèi)存使用情況: RSS 、 PSS 和 USS
由于Linux使用到了虛擬內(nèi)存(virtual memory),因此要準(zhǔn)確的計(jì)算一個(gè)進(jìn)程實(shí)際使用的物理內(nèi)存就不是那么簡(jiǎn)單。 只知道進(jìn)程的虛擬內(nèi)存大小也并沒(méi)有太大的用處,因?yàn)檫€是無(wú)法獲取到實(shí)際分配的物理內(nèi)存大小。
- RSS(Resident set size),使用top命令可以查詢到,是最常用的內(nèi)存指標(biāo),表示進(jìn)程占用的物理內(nèi)存大小。但是,將各進(jìn)程的RSS值相加,通常會(huì)超出整個(gè)系統(tǒng)的內(nèi)存消耗,這是因?yàn)镽SS中包含了各進(jìn)程間共享的內(nèi)存。
PSS(Proportional set size)會(huì)更準(zhǔn)確一些,它將共享內(nèi)存的大小進(jìn)行平均后,再分?jǐn)偟礁鬟M(jìn)程上去。
USS(Unique set size )是PSS中自己的部分,它只計(jì)算了進(jìn)程獨(dú)自占用的內(nèi)存大小,不包含任何共享的部分。
安裝Smem
smem是一個(gè)能夠生成多種內(nèi)存耗用報(bào)告的命令行工具,它從/proc文件系統(tǒng)中提取各進(jìn)程的PSS/USS信息,并進(jìn)行匯總輸出。它還內(nèi)建了圖表的生成能力,所以能夠方便地分析整個(gè)系統(tǒng)的內(nèi)存使用情況。
在Debian, Ubuntu 或 Linux Mint 上安裝smem
$ sudo apt-get install smem
在Fedora 或 CentOS/RHEL上安裝Smem
在CentOS/RHEL上,你首先得啟用EPEL倉(cāng)庫(kù)。
$ sudo yum install smem python-matplotlib
使用smem檢查內(nèi)存使用情況
你可以在非特權(quán)模式下使用smem,它能夠顯示當(dāng)前用戶運(yùn)行的所有進(jìn)程的內(nèi)存使用情況,并按照PSS的大小進(jìn)行排序。
$ smem
如有你想得到整個(gè)系統(tǒng)中所有用戶的內(nèi)存使用情況,就需要使用root權(quán)限來(lái)運(yùn)行smem。
$ sudo smem
也可以按用戶維度來(lái)輸出報(bào)告:
$ sudo smem -u
smem提供了以下選項(xiàng)來(lái)對(duì)輸出結(jié)果進(jìn)行篩選,支持按映射方式(mapping)、進(jìn)程和用戶三個(gè)維度的篩選:
- -M 正則表達(dá)式>
-P 正則表達(dá)式>
-U 正則表達(dá)式>
想了解smem更多的使用方式,可以查詢用戶手冊(cè)(man page)。
使用smem圖形化顯示內(nèi)存使用情況
圖形化的報(bào)告使用起來(lái)會(huì)更加方便快捷。smem支持兩種格式的圖形顯示方式:直方圖和餅圖。
下面是一些圖形化顯示的實(shí)例。
下面的命令行會(huì)基于PSS/RSS值,生成直方圖,以用戶alice為例。
$ sudo smem --bar name -c "pss uss" -U alice
這個(gè)例子會(huì)生成一張餅圖,圖中顯示了系統(tǒng)中各進(jìn)程的PSS內(nèi)存使用量:
$ sudo smem --pie name -c "pss"
概括來(lái)說(shuō),smem是一個(gè)方便易用的內(nèi)存分析工具。利用smem的格式化輸出,你可以對(duì)內(nèi)存使用報(bào)告進(jìn)行自動(dòng)化分析,并執(zhí)行一些自動(dòng)化的處理措施。如果你還知道其他的一些優(yōu)秀的內(nèi)存檢測(cè)工具,請(qǐng)?jiān)诹粞詤^(qū)告訴我。