在Linux上找出总体内存
1. 概述
有时,我们可能需要检查运行 Linux 的服务器上的总内存大小,或者我们可能需要在 shell 脚本中使用内存统计信息。幸运的是,我们可以使用许多工具来检查总物理内存。在本教程中,我们将通过使用几个有用的命令和工具,采用不同的方法来实现该目的。
2. free
free 是我们将看到的所有命令中最简单的。它用于打印物理和交换内存使用情况——默认情况下,它打印到标准输出。free命令是广泛使用的快速检查 RAM 统计信息的命令之一,因为它在大多数 Linux 发行版上都可用。我们可以简单地在我们的终端上输入free命令,不带任何标志:
$ free
total used free shared buff/cache available
Mem: 8021048 1320432 5689744 335556 1010872 6121932
Swap: 0 0 0
正如我们所能,物理内存的大小以字节为单位打印。但是,我们可以使用*-h或–human*标志轻松地以人类可读的格式打印输出:
$ free -h
total used free shared buff/cache available
Mem: 7.6Gi 1.3Gi 5.4Gi 318Mi 985Mi 5.8Gi
Swap: 0B 0B 0B
从上面的输出中可以看出,我们总共有 7.6 GiB 的 RAM。此外,还有许多其他选项可用于以我们喜欢的格式打印输出,例如*–kilo*、 –mega、 –Giga等。另一个有趣的选项是-s*选项*:
$ free -h -s 5
-s 标志代表秒,因此在此示例中, free 将每5 秒打印一次 RAM 使用情况。**如果我们想以指定的时间间隔监视 RAM 使用情况,**它会特别有用。我们可以使用 Ctrl + C 键盘快捷键轻松终止进程。
3. *vmstat *命令
与 free命令一样,vmstat (虚拟内存统计信息)在大多数 Linux 发行版上也可用。默认情况下,当我们键入vmstat命令时,它会打印空闲、缓冲和缓存内存以及交换、CPU、IO 和系统信息:
$ vmstat -w
--procs-- -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 5352900 56816 1053708 0 0 162 73 328 1087 18 4 78 0 0
-w 或 –wide标志以可读性强的格式打印输出。由于我们对总 RAM 大小感兴趣,因此我们将添加*-s*或 –stats标志:
$ vmstat -s
8021048 K total memory
1564516 K used memory
305336 K active memory
1962636 K inactive memory
5391588 K free memory
58224 K buffer memory
1006720 K swap cache
0 K total swap
0 K used swap
0 K free swap
76393 non-nice user cpu ticks
5 nice user cpu ticks
14122 system cpu ticks
337834 idle cpu ticks
1790 IO-wait cpu ticks
1463 IRQ cpu ticks
614 softirq cpu ticks
0 stolen cpu ticks
617253 pages paged in
310410 pages paged out
0 pages swapped in
0 pages swapped out
1426200 interrupts
4722588 CPU context switches
1625563254 boot time
1949 forks
输出中的第一个条目是总物理 RAM。有时,我们不需要所有信息,因此我们可以使用*grep *仅提取所需的条目:
$ vmstat -s | grep -i 'total memory' | sed 's/ *//'
8021048 K total memory
4. top 命令
top 基本上是 一个带有实时输出的命令行任务管理器。它用于在干净的表格布局中检查正在运行的进程。它还向我们展示了 CPU、RAM 和系统的一般信息。我们可以通过简单地运行top命令来启动它:
$ top
top - 15:18:13 up 57 min, 1 user, load average: 3.40, 3.26, 2.04
Tasks: 138 total, 1 running, 137 sleeping, 0 stopped, 0 zombie
%Cpu(s): 17.2 us, 3.6 sy, 0.0 ni, 77.5 id, 0.3 wa, 0.9 hi, 0.5 si, 0.0 st
MiB Mem : 7833.1 total, 4665.9 free, 1782.3 used, 1384.8 buff/cache
top - 15:18:49 up 57 min, 1 user, load average: 2.61, 3.08, 2.03
Tasks: 138 total, 1 running, 137 sleeping, 0 stopped, 0 zombie
top - 15:18:58 up 58 min, 1 user, load average: 2.45, 3.02, 2.02
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 5324.5 avail Mem
在顶部,我们可以看到Mem字段旁边的内存信息,并观察到我们总共有 7833 MiB 的总 RAM。
5. *dmidecode *实用程序
*dmidecode *是一个帮助工具,它以人类可读的格式打印有关硬件组件的信息,例如硬件规格、序列号和 BIOS 版本。硬件信息是从 DMI 表中提取的。我们还可以使用它来查找有关我们系统的有趣信息,例如支持的最大内存。
5.1. 安装dmidecode
默认情况下,dmidecode未安装在某些 Linux 发行版上,因此我们将首先安装它。我们可以使用包管理器直接从我们的分发存储库安装dmidecode。
对于基于 Ubuntu 的发行版,我们可以通过apt 安装软件包:
# apt install dmidecode
对于 RHEL、Fedora 和 CentOS,我们可以使用yum :
# yum install dmidecode
在基于 Arch 的发行版上,只需使用pacman :
# pacman -Sy dmidecode
5.2. 使用dmidecode
安装完成后,我们可以 从终端运行dmidecode 命令:
# dmidecode
我们需要有 root 权限才能运行dmidecode。运行命令后,我们将能够看到详细的硬件信息。它包含很多与我们的硬件组件相关的信息,但我们只对我们的总内存大小感兴趣。
幸运的是,我们可以将*–type选项提供给不同组件(例如 BIOS、内存、处理器、温度等)的命令。–type*选项 需要一个 DMI 类型的数字。
在我们的例子中,我们想要查看内存 DMI 类型,可以使用分配的数字 5、6、16、17、18、19、20、21 和 22 访问它。但是,我们对数字感兴趣19,它将打印当前连接到我们主板上插槽的 RAM 设备:
# dmidecode --type 19
# dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 3.0.0 present.
Handle 0x0049, DMI type 19, 31 bytes
Memory Array Mapped Address
Starting Address: 0x00000000000
Ending Address: 0x001FFFFFFFF
Range Size: 8 GB
Physical Array Handle: 0x0044
Partition Width: 1
如我们所见,我们只有一个 RAM 设备,总大小为 8 GB,安装在其中一个 RAM 插槽中。
6. /proc/meminfo虚拟文件
/proc目录 是一种特殊类型的目录,其中包含虚拟文件。这些虚拟文件是查看 Linux 内核、进程和配置的一种方式。这些文件实际上并不存在于磁盘上,也不占用空间,但它们是在读取时创建的。访问某些文件需要 root 访问权限。
/proc目录中有一个名为meminfo的特殊虚拟文件,可以使用cat和less 等命令读取。meminfo文件包含有关我们的物理内存大小的信息以及其他有用信息。让我们使用cat读取*/proc/meminfo*文件:
$ cat /proc/meminfo
在上面的示例中,我们使用了cat命令,这是一个有用的实用程序,可以从文件或标准输入中读取。命令执行后,它将读取 / proc/meminfo并向我们提供有关物理内存的长输出。我们只对总 RAM 大小感兴趣,它出现在输出的前三行中:
$ cat /proc/meminfo | head -n 3
MemTotal: 8021048 kB
MemFree: 4542960 kB
MemAvailable: 5155668 kB
我们使用head 命令只打印了我们感兴趣的行。提供给head 命令的*-n*参数用于指定要读取的行数。大小以千字节为单位打印,应该让我们了解总的、空闲的和可用的物理内存是多少。
假设我们正在编写一个 Bash 脚本,我们需要在其中处理物理 RAM 大小。我们可以通过先读取*/proc/meminfo文件然后grep*总内存大小来实现:
#!/bin/bash
total_ram () {
local totalram=$(cat /proc/meminfo | grep -i 'memtotal' | grep -o '[[:digit:]]*')
echo $totalram
}
ram_size=$(total_ram)
echo "Total RAM: $ram_size kB"
现在,让我们保存脚本并使其可执行:
$ chmod +755 totalram.sh
$ ./totalram.sh
Total RAM: 8021048 kB
7. 使用 GUI 任务管理器
除了管理进程之外,我们还可以使用多种 GUI 任务管理器来检查 CPU、RAM 和网络使用情况。让我们快速浏览一下最流行的 Linux。
7.1. GNOME 系统监视器
GNOME 系统监视器 是GNOME 桌面环境附带的默认任务管理器。但是,如果我们运行的是不同的桌面环境,我们可以轻松地在我们的分发包存储库中查找gnome-system-monitor包。安装后,我们可以从命令行启动它:
$ gnome-system-monitor
导航到 *“资源”*选项卡后,我们可以在其他统计信息中看到我们的总内存大小。
7.2. K系统卫士
KSysGuard 是由 KDE 社区开发的默认任务管理器, 默认情况下随 KDE 一起提供。同样,如果我们使用不同的桌面环境,我们可以通过在包存储库中查找ksysguard包轻松地将它安装到我们的系统上。安装后,我们可以使用ksysguard命令启动它:
$ ksysguard
ksysguard启动后 ,我们可以前往*“系统负载”*选项卡并查看我们的内存信息以及漂亮的图表。