你的Linux系統(tǒng)上安裝了多少內(nèi)存?又使用了多少?
譯文【51CTO.com快譯】幾個(gè)命令可報(bào)告Linux系統(tǒng)上安裝和使用了多少內(nèi)存。你可能淹沒于細(xì)節(jié),也可能獲得快速簡(jiǎn)易的答案,這看你使用哪個(gè)命令。
有好多方法可以獲取Linux系統(tǒng)上已安裝內(nèi)存方面的信息,并查看使用了其中多少內(nèi)存。一些命令提供了大量細(xì)節(jié),另一些命令提供了簡(jiǎn)潔但不一定易于理解的答案。本文介紹幾個(gè)用于檢查內(nèi)存及使用情況的實(shí)用工具。
不過在探討細(xì)節(jié)之前,先看幾個(gè)基礎(chǔ)知識(shí)。物理內(nèi)存和虛擬內(nèi)存不一樣。后者包括配置成用作交換區(qū)(swap)的磁盤空間。交換區(qū)可能包括為此用途留出的分區(qū),或者創(chuàng)建新分區(qū)不切實(shí)際時(shí)為添加到可用交換區(qū)而創(chuàng)建的文件。一些Linux命令提供了兩方面的信息。
交換區(qū)擴(kuò)展內(nèi)存的辦法就是提供這樣的磁盤空間:可用于容納物理內(nèi)存填滿時(shí)移到磁盤的非活動(dòng)頁(yè)面。
內(nèi)存管理中起到作用的一個(gè)文件是/ proc / kcore。該文件看起來(lái)像普通文件(不過極龐大),但它根本不占用磁盤空間。相反,它是個(gè)虛擬文件,就像/proc中的所有文件。
- $ ls -l /proc/kcore
- -r--------. 1 root root 140737477881856 Jan 28 12:59 /proc/kcore
頗有意思的是,下面查詢的兩個(gè)系統(tǒng)安裝的內(nèi)存量不一樣,不過兩者上面的/proc/kcore大小卻一樣。這兩個(gè)系統(tǒng)中的一個(gè)安裝了4 GB內(nèi)存,第二個(gè)安裝了6 GB。
- system1$ ls -l /proc/kcore
- -r--------. 1 root root 140737477881856 Jan 28 12:59 /proc/kcore
- system2$ ls -l /proc/kcore
- -r-------- 1 root root 140737477881856 Feb 5 13:00 /proc/kcore
聲稱此文件大小代表可用虛擬內(nèi)存量(可能加上4K)的解釋并不重要。這個(gè)數(shù)字表明這些系統(tǒng)上的虛擬內(nèi)存是128太字節(jié)!這個(gè)數(shù)字似乎代表64位系統(tǒng)能夠?qū)ぶ范嗌賰?nèi)存,而不是系統(tǒng)上有多少可用內(nèi)存。在命令行上計(jì)算128 TB和那個(gè)數(shù)字加上4K看起來(lái)很容易:
- $ expr 1024 \* 1024 \* 1024 \* 1024 \* 128
- 140737488355328
- $ expr 1024 \* 1024 \* 1024 \* 1024 \* 128 + 4096
- 140737488359424
檢查內(nèi)容的另一個(gè)更方便的命令是free命令。它顯示了一目了然的內(nèi)存報(bào)告。
- $ free
- total used free shared buff/cache available
- Mem: 6102476 812244 4090752 13112 1199480 4984140
- Swap: 2097148 0 2097148
若使用-g選項(xiàng),free可報(bào)告以GB為單位的值。
- $ free -g
- total used free shared buff/cache available
- Mem: 5 0 3 0 1 4
- Swap: 1 0 1
若使用-t選項(xiàng),free顯示了與不用選項(xiàng)同樣的值,但在輸出底部添加了合計(jì)行。
- $ free -t
- total used free shared buff/cache available
- Mem: 6102476 812408 4090612 13112 1199456 4983984
- Swap: 2097148 0 2097148
- Total: 8199624 812408 6187760
當(dāng)然,你可以選擇兩個(gè)選項(xiàng)都用。
- $ free -tg
- total used free shared buff/cache available
- Mem: 5 0 3 0 1 4
- Swap: 1 0 1
- Total: 7 0 5
如果你試圖回答“該系統(tǒng)上安裝了多少內(nèi)存?”這個(gè)問題,可能很失望。這是上一個(gè)例子中顯示的同一個(gè)系統(tǒng),顯示擁有6GB內(nèi)存。這并不意味著該報(bào)告是錯(cuò)誤的,而是說顯示了系統(tǒng)擁有的可用內(nèi)存。
free命令還提供了每隔X秒(下面例子中是10秒)更新顯示內(nèi)容的選項(xiàng)。
- $ free -s 10
- total used free shared buff/cache available
- Mem: 6102476 812280 4090704 13112 1199492 4984108
- Swap: 2097148 0 2097148
- total used free shared buff/cache available
- Mem: 6102476 812260 4090712 13112 1199504 4984120
- Swap: 2097148 0 2097148
若使用-l,free命令提供高端內(nèi)存和低端內(nèi)存的使用情況。
- $ free -l
- total used free shared buff/cache available
- Mem: 6102476 812376 4090588 13112 1199512 4984000
- Low: 6102476 2011888 4090588
- High: 0 0 0
- Swap: 2097148 0 2097148
查看內(nèi)存的另一個(gè)選項(xiàng)是/proc/meminfo文件。與/proc/kcore一樣,這是個(gè)虛擬文件,給出了實(shí)用報(bào)告,顯示安裝了多少內(nèi)存、多少是閑置和可用內(nèi)存。很顯然,閑置和可用并不是一回事。MemFree似乎代表未使用的內(nèi)存。MemAvailable估計(jì)了多少內(nèi)存可用來(lái)啟動(dòng)新的應(yīng)用程序。
- $ head -3 /proc/meminfo
- MemTotal: 6102476 kB
- MemFree: 4090596 kB
- MemAvailable: 4984040 kB
如果你只想查看總內(nèi)存,可以使用這其中一個(gè)命令:
- $ awk '/MemTotal/ {print $2}' /proc/meminfo
- 6102476
- $ grep MemTotal /proc/meminfo
- MemTotal: 6102476 kB
DirectMap條目將內(nèi)存信息分解成幾個(gè)類別。
- $ grep DirectMap /proc/meminfo
- DirectMap4k: 213568 kB
- DirectMap2M: 6076416 kB
DirectMap4k代表映射到標(biāo)準(zhǔn)4K頁(yè)面的內(nèi)存量,而DirectMap2M顯示了映射到2MB頁(yè)面的內(nèi)存量。
getconf命令會(huì)提供更豐富一點(diǎn)的信息。
- $ getconf -a | more
- LINK_MAX 65000
- _POSIX_LINK_MAX 65000
- MAX_CANON 255
- _POSIX_MAX_CANON 255
- MAX_INPUT 255
- _POSIX_MAX_INPUT 255
- NAME_MAX 255
- _POSIX_NAME_MAX 255
- PATH_MAX 4096
- _POSIX_PATH_MAX 4096
- PIPE_BUF 4096
- _POSIX_PIPE_BUF 4096
- SOCK_MAXBUF
- _POSIX_ASYNC_IO
- _POSIX_CHOWN_RESTRICTED 1
- _POSIX_NO_TRUNC 1
- _POSIX_PRIO_IO
- _POSIX_SYNC_IO
- _POSIX_VDISABLE 0
- ARG_MAX 2097152
- ATEXIT_MAX 2147483647
- CHAR_BIT 8
- CHAR_MAX 127
- --More--
使用如下所示的命令,將該輸出簡(jiǎn)化成特定的內(nèi)容,你會(huì)得到上述一些命令提供的同一種信息。
- $ getconf -a | grep PAGES | awk 'BEGIN {total = 1} {if (NR == 1 || NR == 3) total *=$NF} END {print total / 1024" kB"}'
- 6102476 kB
該命令乘以輸出中的第一行和最后一行,以此計(jì)算內(nèi)存,就像這樣:
- PAGESIZE 4096 <==
- _AVPHYS_PAGES 1022511
- _PHYS_PAGES 1525619 <==
單獨(dú)計(jì)算,我們可以看到該值是如何得出的。
- $ expr 4096 \* 1525619 / 1024
- 6102476
很顯然這是理應(yīng)轉(zhuǎn)變成化名的命令之一。
輸出非常一目了然的另一個(gè)命令是top。在top輸出的頭五行,會(huì)看到顯示內(nèi)存在如何使用的幾個(gè)數(shù)字。
- $ top
- top - 15:36:38 up 8 days, 2:37, 2 users, load average: 0.00, 0.00, 0.00
- Tasks: 266 total, 1 running, 265 sleeping, 0 stopped, 0 zombie
- %Cpu(s): 0.2 us, 0.4 sy, 0.0 ni, 99.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
- MiB Mem : 3244.8 total, 377.9 free, 1826.2 used, 1040.7 buff/cache
- MiB Swap: 3536.0 total, 3535.7 free, 0.3 used. 1126.1 avail Mem
最后這個(gè)命令可簡(jiǎn)明扼要地回答“那么,該系統(tǒng)上安裝了多少內(nèi)存?”這個(gè)問題:
- $ sudo dmidecode -t 17 | grep "Size.*MB" | awk '{s+=$2} END {print s / 1024 "GB"}'
- 6GB
Linux系統(tǒng)提供了許多選項(xiàng),用于查看系統(tǒng)上安裝了多少內(nèi)存、已使用內(nèi)存和可用內(nèi)存有多少,這取決于你想看到多具體的細(xì)節(jié)。
原文標(biāo)題:How much memory is installed and being used on your Linux systems?,作者:Sandra Henry-Stocker
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】