Contents

在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的特殊虚拟文件,可以使用catless 等命令读取。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

/uploads/total_physical_memory/1.png

导航到 *“资源”*选项卡后,我们可以在其他统计信息中看到我们的总内存大小。

7.2. K系统卫士

KSysGuard 是由 KDE 社区开发的默认任务管理器, 默认情况下随 KDE 一起提供。同样,如果我们使用不同的桌面环境,我们可以通过在包存储库中查找ksysguard包轻松地将它安装到我们的系统上。安装后,我们可以使用ksysguard命令启动它:

$ ksysguard

/uploads/total_physical_memory/2.png

ksysguard启动后 ,我们可以前往*“系统负载”*选项卡并查看我们的内存信息以及漂亮的图表。