Linux終端:用smem查看內(nèi)存占用情況
譯文無(wú)論是作為系統(tǒng)管理員,還是作為使用桌面版Linux的簡(jiǎn)單用戶,你都會(huì)注意到,某個(gè)進(jìn)程在耗用你系統(tǒng)的所有內(nèi)存。
首先要明白Linux是如何管理內(nèi)存的;我多次接到用戶的反映,說(shuō)運(yùn)行了free命令,就是無(wú)法適當(dāng)讀取輸出。簡(jiǎn)而言之,如果是Linux內(nèi)核,不用擔(dān)心;內(nèi)核在耗用內(nèi)存,緩存文件呢。
放心,Linux內(nèi)核開(kāi)發(fā)人員比你我更有能力找到一種優(yōu)秀的算法來(lái)緩存文件,并且當(dāng)某個(gè)進(jìn)程需要時(shí),釋放該內(nèi)存區(qū)域,所以千萬(wàn)不要讓我把運(yùn)行諸如這種命令的某個(gè)任務(wù)放入計(jì)劃任務(wù)(cron):
- echo 3 > /proc/sys/vm/drop_caches
當(dāng)然,之后,你會(huì)在系統(tǒng)上有更多的可用閑置內(nèi)存,但是系統(tǒng)不得不從磁盤(pán)重新讀取所有文件,所以就性能而言,這通常是一個(gè)糟糕的舉措:
但現(xiàn)在我們不妨看一個(gè)小巧的程序,它可以幫助我們找到哪些進(jìn)程/用戶在大量耗用我們系統(tǒng)的內(nèi)存。
smem這個(gè)工具可以提供Linux系統(tǒng)上內(nèi)存耗用情況方面的眾多報(bào)告。與現(xiàn)有的工具不一樣,smem可以報(bào)告實(shí)際使用的物理內(nèi)存(PSS),這是一種更有意義的指標(biāo),可以衡量虛擬內(nèi)存系統(tǒng)中的庫(kù)和應(yīng)用程序所占用的內(nèi)存數(shù)量。
由于大部分的物理內(nèi)存通常在多個(gè)應(yīng)用程序之間共享,名為實(shí)際使用物理內(nèi)存(RSS)的這個(gè)標(biāo)準(zhǔn)的內(nèi)存耗用衡量指標(biāo)會(huì)大大高估內(nèi)存耗用情況。PSS這個(gè)參數(shù)而是衡量了每個(gè)應(yīng)用程序在每個(gè)共享內(nèi)存區(qū)中的“公平分配”,給出了一個(gè)切合實(shí)際的衡量指標(biāo)。
smem有許多功能特性:
- 系統(tǒng)概況列表
- 按進(jìn)程、映射和用戶列表
- 按用戶、映射或用戶過(guò)濾
- 來(lái)自多個(gè)數(shù)據(jù)源的可配置列
- 可配置的輸出單位和百分比
- 可配置的標(biāo)題和總和
- 從/proc讀取活動(dòng)數(shù)據(jù)
- 從目錄鏡像或經(jīng)過(guò)壓縮的打包文件讀取數(shù)據(jù)快照
- 面向嵌入式系統(tǒng)的輕型捕獲工具
- 內(nèi)置的圖表生成功能
安裝
如果你使用Debian、Ubuntu或Mint,可以使用下面這個(gè)命令,直接從官方軟件庫(kù)安裝smem:
- $ sudo apt-get install smem
Arch Linux用戶可以從Arch用戶軟件庫(kù)(AUR,https://www.archlinux.org/packages/community/i686/smem/)安裝程序包。
Red Hat / Fedora / CentOS / SuSE用戶可以使用直接從官方網(wǎng)站下載的預(yù)編譯二進(jìn)制代碼。為了方便起見(jiàn),你可以拷貝剪貼這些命令,這些命令會(huì)將命令smen放入到你的/usr/local/bin文件夾:
- cd /tmp/
- wget http://www.selenic.com/smem/download/smem-1.3.tar.gz
- tar xvf smem-1.3.tar.gz
- sudo cp /tmp/smem-1.3/smem /usr/local/bin/
- sudo chmod +x /usr/local/bin/smem
基本用法
smem可報(bào)告物理內(nèi)存使用情況,并且考慮到共享的內(nèi)存頁(yè)面。非共享內(nèi)存被報(bào)告為進(jìn)程獨(dú)自占用的物理內(nèi)存(USS)。共享內(nèi)存在共享該內(nèi)存的多個(gè)進(jìn)程之間平均分配。非共享內(nèi)存(USS)以及進(jìn)程的共享內(nèi)存比例被報(bào)告為實(shí)際使用的物理內(nèi)存(PSS)。USS和PSS只包含物理內(nèi)存使用情況。它們并不包含已經(jīng)被置換到磁盤(pán)上的內(nèi)存。
基本用法會(huì)顯示運(yùn)行中進(jìn)程以及所用的內(nèi)存數(shù)量;想看看這方面的情況,運(yùn)行不帶任何選項(xiàng)的命令smem,這會(huì)得出類(lèi)似下面這樣的輸出:
# smem PID User Command Swap USS PSS RSS .... 4223 linuxaria /usr/lib/chromium-browser/c 0 9144 11696 29132 14280 root python ./smem 0 11580 11839 13680 2180 linuxaria /usr/bin/python /usr/share/ 0 12956 14691 24392 2144 linuxaria python /usr/lib/linuxmint/m 0 20252 22337 35648 2121 linuxaria Thunar --daemon 0 13316 23122 44404 2123 linuxaria xfdesktop 0 24004 24924 36032 13095 linuxaria /usr/lib/chromium-browser/c 0 27536 30996 53328 2577 linuxaria /usr/bin/python /usr/lib/ub 0 34192 35112 41300 2127 linuxaria /home/riccio/copy/x86_64/Co 0 40268 41081 52248 10720 linuxaria /usr/lib/chromium-browser/c 0 38684 42107 63928 10561 linuxaria /usr/lib/chromium-browser/c 0 43956 48137 71644 10579 linuxaria /usr/lib/chromium-browser/c 0 46276 50290 73484 5605 linuxaria transmission-gtk /tmp/[kick 0 48616 51508 65148 8938 linuxaria /usr/lib/firefox/plugin-con 0 48960 55428 71132 2186 linuxaria /home/linuxaria/.dropbox-dist/ 0 55524 56061 64820 1722 root /usr/bin/X :0 -audit 0 -aut 0 52360 73110 96008 10623 linuxaria /usr/lib/chromium-browser/c 0 114224 121888 149236 4171 linuxaria chromium-browser --disable- 0 131044 140415 165780 7050 linuxaria /usr/lib/thunderbird/thunde 0 253428 256803 273152 2644 linuxaria /usr/lib/firefox/firefox 0 528420 537423 558992 |
所以在該示例(我的桌面)中,耗用較多內(nèi)存的進(jìn)程是Firefox,占用內(nèi)存第二多的是Thunderbird。
-u是一個(gè)有用的選項(xiàng),它顯示了每個(gè)用戶所耗用的內(nèi)存總量:
#smem -u User Count Swap USS PSS RSS daemon 1 0 196 197 368 rtkit 1 0 300 312 1396 nobody 1 0 428 442 1600 mdm 2 0 600 695 1808 avahi 2 0 568 806 2420 syslog 1 0 1032 1043 1884 messagebus 1 0 1124 1207 2048 root 40 0 96568 123002 203372 linuxaria 83 0 1539864 1640378 2222556 |
可以為該命令添加-p,顯示百分比數(shù)值:
#smem -u -p User Count Swap USS PSS RSS daemon 1 0.00% 0.00% 0.00% 0.00% rtkit 1 0.00% 0.00% 0.00% 0.02% nobody 1 0.00% 0.01% 0.01% 0.02% mdm 2 0.00% 0.01% 0.01% 0.02% avahi 2 0.00% 0.01% 0.01% 0.03% syslog 1 0.00% 0.01% 0.01% 0.02% messagebus 1 0.00% 0.01% 0.01% 0.03% root 40 0.00% 1.18% 1.47% 2.41% linuxaria 83 0.00% 19.29% 20.48% 27.58% |
或者,如果你更想看到整個(gè)系統(tǒng)的內(nèi)存使用情況,則可以使用-w選項(xiàng):
#smem -w -p Area Used Cache Noncache firmware/hardware 0.00% 0.00% 0.00% kernel image 0.00% 0.00% 0.00% kernel dynamic memory 64.55% 62.42% 2.13% userspace memory 22.12% 3.00% 19.12% free memory 13.33% 13.33% 0.00% |
說(shuō)到-w,我建議另外使用選項(xiàng)-R REALMEM,這個(gè)值是指物理內(nèi)存數(shù)量。這讓smem可以在整個(gè)系統(tǒng)(-w)的輸出中發(fā)現(xiàn)固件/硬件所耗用的內(nèi)存數(shù)量。如果提供該選項(xiàng),它還可以用作百分比所用到的總內(nèi)存大小。
#smem -R 8G -w -p Area Used Cache Noncache firmware/hardware 2.83% 0.00% 2.83% kernel image 0.00% 0.00% 0.00% kernel dynamic memory 63.02% 60.95% 2.07% userspace memory 21.60% 2.91% 18.68% free memory 12.56% 12.56% 0.00% |
借助smen,以圖形顯示linux內(nèi)存
如果借助smem(又擁有matplotlib庫(kù)),只要再借助幾個(gè)選項(xiàng),就可以生成條形圖和餅形圖。
顯示帶“pss”和“uss”這兩列的條形圖:
- #smem --bar pid -c "pss uss"
創(chuàng)建餅形圖,顯示在運(yùn)行系統(tǒng)上以“k”開(kāi)頭的進(jìn)程:
- #smem -P '^k' --pie=name
結(jié)束語(yǔ)
smem是一款易于使用的工具,你在尋找大量耗用內(nèi)存的進(jìn)程時(shí),它可以輕松給出一些有用信息,而且很容易以圖形來(lái)顯示,那樣你就能聯(lián)系用戶,勸說(shuō)他們?cè)趦?nèi)存方面需要合理使用。
原文鏈接:http://linuxaria.com/pills/linux-terminal-check-who-uses-all-your-memory-with-smem?lang=en
原文標(biāo)題:Linux Terminal: Check who uses all your memory with smem