如何在 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 '{s+=$2} END {print s / 1024 "GB"}'
6GB
取決於你想要獲取多少細節,Linux 系統提供了許多用來檢視系統安裝記憶體以及使用/空閒記憶體的選擇。
作者:Sandra Henry-Stocker 選題:lujun9972 譯者:leommxj 校對:wxy
相關文章
- Linux下應用程式到底使用了多少記憶體 ?Linux記憶體
- 如何判斷Linux系統安裝在VMware上?Linux
- Linux 下判斷Server 記憶體是否不足LinuxServer記憶體
- Linux 下判斷Server 記憶體是否不足(原創)LinuxServer記憶體
- 記憶體管理:判斷物件是否存活記憶體物件
- 【轉lis的文章】Linux 下判斷Server 記憶體是否不足LinuxServer記憶體
- 如何在無響應的Linux系統中殺掉記憶體消耗最大的程式Linux記憶體
- 如何在Mac系統中安裝Win7系統MacWin7
- 教你如何在 Linux 系統上安裝 JavaLinuxJava
- win10怎麼安裝軟體_如何在win10系統中安裝軟體Win10
- 安裝記憶體2g的可以裝win10系統嗎_2g記憶體裝win10系統的方法記憶體Win10
- 如何在 Linux 中找出記憶體消耗最大的程式Linux記憶體
- Linux記憶體子系統——Locking Pages(記憶體鎖定)Linux記憶體
- Linux中如何找出系統所支援的最大記憶體Linux記憶體
- Wix安裝程式中判斷是否安裝的.net framwork 4.5
- 如何檢視linux系統中空閒記憶體/實體記憶體使用/剩餘記憶體Linux記憶體
- Linux系統中安裝pipLinux
- Linux核心記憶體管子系統分析Linux記憶體
- Linux AS 使用記憶體檔案系統Linux記憶體
- Linux系統釋放cache記憶體Linux記憶體
- LINUX中斷--申請中斷和解除安裝中斷Linux
- 判斷Linux系統是否被黑的方法Linux
- 如何在Java中判斷是否為空Java
- LINUX作業系統對硬體支援有上限麼?最大多少記憶體?多大硬碟容量?Linux作業系統記憶體硬碟
- linux中安裝JDK linux中安裝Tomcat linux中安裝Mysql 及故障解析 linux系統安裝redisLinuxJDKTomcatMySqlRedis
- win10系統16g記憶體推薦虛擬記憶體設定多少合適Win10記憶體
- 如何在樹莓派中安裝 VoIP 系統:Asterisk樹莓派AST
- 安裝的 Linux 軟體包有多少?Linux
- windows10系統如何解除安裝記憶體模板驅動Windows記憶體
- Linux作業系統記憶體淺析Linux作業系統記憶體
- Windows及Linux系統虛擬記憶體WindowsLinux記憶體
- Linux 中 7 個判斷檔案系統型別的方法Linux型別
- 如何在Linux中安裝Ncurses庫Linux
- Linux中如何安裝RabbitMQ?在linux系統中安裝Rabbitmq的方法LinuxMQ
- [zt] 如何使作業系統使用超過4G的記憶體作業系統記憶體
- Win10系統中“系統和壓縮記憶體”佔用大量記憶體如何解決Win10記憶體
- Linux作業系統中記憶體buffer和cache的區別Linux作業系統記憶體
- 如何在 MySQL 中判斷中文字元?MySql字元