Linux中國

如何在 Linux 系統中判斷安裝、使用了多少內存

在 Linux 系統中有很多種方法獲取有關安裝了多少內存的信息及查看多少內存正在被使用。有些命令提供了大量的細節,而其他命令提供了簡潔但不一定易於理解的答案。在這篇文章中,我們將介紹一些查看內存及其使用狀態的有用的工具。

在我們開始之前,讓我們先來回顧一些基礎知識。物理內存和虛擬內存並不是一回事。後者包括配置為交換空間的磁碟空間。交換空間可能包括為此目的特意留出來的分區,以及在創建新的交換分區不可行時創建的用來增加可用交換空間的文件。有些 Linux 命令會提供關於兩者的信息。

當物理內存佔滿時,交換空間通過提供可以用來存放內存中非活動頁的磁碟空間來擴展內存。

/proc/kcore 是在內存管理中起作用的一個文件。這個文件看上去是個普通文件(雖然非常大),但它並不佔用任何空間。它就像其他 /proc 下的文件一樣是個虛擬文件。

$ ls -l /proc/kcore
-r--------. 1 root root 140737477881856 Jan 28 12:59 /proc/kcore

有趣的是,下面查詢的兩個系統並沒有安裝相同大小的內存,但 /proc/kcore 的大小卻是相同的。第一個系統安裝了 4 GB 的內存,而第二個系統安裝了 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

一種不靠譜的解釋說這個文件代表可用虛擬內存的大小(沒準要加 4 KB),如果這樣,這些系統的虛擬內存可就是 128TB 了!這個數字似乎代表了 64 位系統可以定址多少內存,而不是當前系統有多少可用內存。在命令行中計算 128 TB 和這個文件大小加上 4 KB 很容易。

$ expr 1024 * 1024 * 1024 * 1024 * 128
140737488355328
$ expr 1024 * 1024 * 1024 * 1024 * 128 + 4096
140737488359424

另一個用來檢查內存的更人性化的命令是 free。它會給出一個易於理解的內存報告。

$ free
              total        used        free      shared  buff/cache   available
Mem:        6102476      812244     4090752       13112     1199480     4984140
Swap:       2097148           0     2097148

使用 -g 選項,free 會以 GB 為單位返回結果。

$ free -g
              total        used        free      shared  buff/cache   available
Mem:              5           0           3           0           1           4
Swap:             1           0           1

使用 -t 選項,free 會顯示與無附加選項時相同的值(不要把 -t 選項理解成 TB),並額外在輸出的底部添加一行總計數據。

$ free -t
              total        used        free      shared  buff/cache   available
Mem:        6102476      812408     4090612       13112     1199456     4983984
Swap:       2097148           0     2097148
Total:      8199624      812408     6187760

當然,你也可以選擇同時使用兩個選項。

$ free -tg
              total        used        free      shared  buff/cache   available
Mem:              5           0           3           0           1           4
Swap:             1           0           1
Total:            7           0           5

如果你嘗試用這個報告來解釋「這個系統安裝了多少內存?」,你可能會感到失望。上面的報告就是在前文說的裝有 6 GB 內存的系統上運行的結果。這並不是說這個結果是錯的,這就是系統對其可使用的內存的看法。

free 命令也提供了每隔 X 秒刷新顯示的選項(下方示例中 X 為 10)。

$ 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 命令會提供高低內存使用信息。

$ 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

查看內存的另一個選擇是 /proc/meminfo 文件。像 /proc/kcore 一樣,這也是一個虛擬文件,它可以提供關於安裝或使用了多少內存以及可用內存的報告。顯然,空閑內存和可用內存並不是同一回事。MemFree 看起來代表未使用的 RAM。MemAvailable 則是對於啟動新程序時可使用的內存的一個估計。

$ head -3 /proc/meminfo
MemTotal: 6102476 kB
MemFree: 4090596 kB
MemAvailable: 4984040 kB

如果只想查看內存總計,可以使用下面的命令之一:

$ awk '/MemTotal/ {print $2}' /proc/meminfo
6102476
$ grep MemTotal /proc/meminfo
MemTotal: 6102476 kB

DirectMap 將內存信息分為幾類。

$ grep DirectMap /proc/meminfo
DirectMap4k: 213568 kB
DirectMap2M: 6076416 kB

DirectMap4k 代表被映射成標準 4 k 頁的內存大小,DirectMap2M 則顯示了被映射為 2 MB 的頁的內存大小。

getconf 命令將會提供比我們大多數人想要看到的更多的信息。

$ 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--

使用類似下面的命令來將其輸出精簡為指定的內容,你會得到跟前文提到的其他命令相同的結果。

$ getconf -a | grep PAGES | awk 'BEGIN {total = 1} {if (NR == 1 || NR == 3) total *=$NF} END {print total / 1024" kB"}'
6102476 kB

上面的命令通過將下方輸出的第一行和最後一行的值相乘來計算內存。

PAGESIZE                           4096    <==
_AVPHYS_PAGES                      1022511
_PHYS_PAGES                        1525619 <==

自己動手計算一下,我們就知道這個值是怎麼來的了。

$ expr 4096 * 1525619 / 1024
6102476

顯然值得為以上的指令之一設置個 alias

另一個具有非常易於理解的輸出的命令是 top 。在 top 輸出的前五行,你可以看到一些數字顯示多少內存正被使用。

$ 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

最後一個命令將會以一個非常簡潔的方式回答「系統安裝了多少內存?」:

$ sudo dmidecode -t 17 | grep "Size.*MB" | awk &apos;{s+=$2} END {print s / 1024 "GB"}&apos;
6GB

取決於你想要獲取多少細節,Linux 系統提供了許多用來查看系統安裝內存以及使用/空閑內存的選擇。

via: https://www.networkworld.com/article/3336174/linux/how-much-memory-is-installed-and-being-used-on-your-linux-systems.html

作者:Sandra Henry-Stocker 選題:lujun9972 譯者:leommxj 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國