zzxworld

Linux 查看内存大小和使用情况的方法汇总

Linux 查看内存大小和使用情况的方法汇总

内存是影响电脑性能的重要硬件之一,所以在日常使用电脑的过程中,需要经常关注它的使用状况。Linux 系统有多种方式可以查看内存大小,并跟踪到内存的使用情况,本文总结了一些比较常见的方法。

开始之前说明一下,本文所说的方法仅涉及 Linux 系统自带或默认安装的工具,对于需要单独安装的第三方内存信息查看软件或命令,不在本文介绍的范围之内。比如 dmidecodehwinfo

使用系统监视器

虽然说 Linux 系统用命令会比较快捷,但如果使用的是桌面版 Linux,这会是一个更加直观的选择。以我常用的 Gnome 桌面环境为例,它提供了一个名为「系统监视器(System Monitor)」的小工具。直接运行,就能以可视化的图表来观察到内存的使用情况。

memory usage on system monitor

在不同的 Linux 桌面环境下,软件名称可能会不一样。比如在 KDE,它可能叫 KSysGuard。但一定会有一个类似功能的软件。

使用 free 命令

对于习惯用终端,或是在 Linux 服务器环境上,就只能选择使用命令来查看内存使用情况。首先要推荐使用的就是 free 命令,建议加上 -h 选项,它会让命令的输出结果更方便查看。在我的电脑上命令输出如下:

❯ free -h
         total     used    free    shared  buff/cache   available
Mem:      31Gi    3.4Gi    24Gi     1.1Gi       2.9Gi        26Gi
Swap:       0B       0B      0B

这是一个简单的表格结构。第一行为表头,第二行为物理内存信息,第三行为虚拟交换内存。上面输出的信息可以看到,我当前的这台电脑内存有 31GB(total),已经用了 3.4GB(used),剩余可用大小为 26GB(available)。

使用 top 命令

top 是另外一个可以用来查看内存使用情况的命令。直接输入 top 命令后按回车键,就能看到如下界面:

top command result

在第 4 行,即 Mib Mem 开头的这行为内存使用信息,可以看到和 free 命令类似的输出结果,单位为 MB。不过有所不同的是,top 命令每 3 秒就会自动刷新一次数据;而且在下面还有一个列表,其中的 %MEM 这一列提供了运行中程序所占用的内存大小。数字是百分比值,和总内存大小(total)进行换算可以得到程序大致使用的内存。

使用 /proc/meminfo 文件

在 Linux 系统上,一切皆文件。内存信息也能通过文件方式来查看。存放内存信息的文件位置为 /proc/meminfo,所以通过使用查看文件的命令来读取它的内容,也能实现获取内存信息的功能。

cat /proc/meminfo

命令输出结果很长,这里仅列举开头几行作为示例:

MemTotal:       32737172 kB
MemFree:        25040664 kB
MemAvailable:   26554608 kB
Buffers:          164280 kB
Cached:          3064824 kB
SwapCached:            0 kB
Active:           907548 kB
Inactive:        4452772 kB
Active(anon):       3672 kB
Inactive(anon):  3528512 kB

从名字就可以看出,MemTotal 是内存的总大小,MemFree 是未被使用的大小,MemAvailable 是可用大小。

使用 vmstat 命令

使用 vmstat 命令能得到的内存信息和使用 free 命令差不多。而且需要搭配 grep 命令筛选一下结果,否则会有其他信息干扰。建议使用的方式如下:

vmstat -s|grep memory

该命令会输出以下样式的结果:

❯ vmstat -s|grep memory
     32737172 K total memory
      4255132 K used memory
       935848 K active memory
      4317508 K inactive memory
     25135556 K free memory
       169456 K buffer memory

使用 lsmem 命令

使用 lsmem 命令可以查看内存的可用地址范围,区块大小,以及在线状态。这个命令提供的数据过于底层,对大多数人来说难得用上。命令默认的输出结果如下:

❯ lsmem
RANGE                                 SIZE  STATE REMOVABLE  BLOCK
0x0000000000000000-0x000000007fffffff   2G online       yes   0-15
0x0000000100000000-0x000000087fffffff  30G online       yes 32-271

Memory block size:       128M
Total online memory:      32G
Total offline memory:      0B

总结

以日常观察内存使用情况的用途来说,上面列出的方法只需要选择一到两种方法即可。如果使用的是桌面端环境,可以优先考虑使用系统监视器,它能更直观的了解使用的内存大小,以及一段时间里内存使用波动,而且它也提供了和 top 命令一样的进程管理功能,用起来会很方便。free 命令和 top 命令很有掌握的必要,因为对于 Linux 服务器环境而言,默认只能选择它俩。