返回

内存迷雾下的真相:揭秘Linux系统内存指标的内在逻辑

后端

在Linux系统中,内存管理是一个至关重要的环节,它直接影响着系统的性能和稳定性。通过监控和分析内存指标,管理员可以及时发现和解决内存问题,确保系统高效稳定运行。

本文将深入解析Linux内存指标的内在逻辑,介绍free、top、ps、vmstat等常用工具,并提供了全面的内存监控和分析方法,帮助管理员快速定位系统内存问题。

内存指标概述

Linux系统中的内存指标主要包括以下几个方面:

  • 物理内存 (Physical Memory): 物理内存是指计算机中实际安装的内存容量,它是系统运行的基础。
  • 虚拟内存 (Virtual Memory): 虚拟内存是指系统为每个进程分配的地址空间,它可以大于物理内存,当物理内存不足时,会将一部分内存数据交换到硬盘上,以提供额外的内存空间。
  • 内存使用情况 (Memory Usage): 内存使用情况是指当前系统中正在使用的内存容量,包括正在运行的程序、内核数据结构以及缓存等。
  • 内存交换情况 (Memory Swapping): 内存交换情况是指系统将内存数据交换到硬盘上的过程,当物理内存不足时,会将一部分内存数据交换到硬盘上,以提供额外的内存空间。
  • 内存缓存情况 (Memory Cache): 内存缓存情况是指系统将经常访问的数据缓存在内存中,以提高访问速度。

内存监控工具

Linux系统提供了多种内存监控工具,管理员可以根据需要选择合适的工具来监控系统内存使用情况。

free

free命令是最常用的内存监控工具之一,它可以显示系统的物理内存、交换内存以及内存使用情况。

[root@localhost ~]$ free -h
              total        used        free      shared  buff/cache   available
Mem:          3.8G       2.4G       1.1G        38M        326M       1.4G
Swap:         2.0G        98M       1.9G

top

top命令可以动态显示系统的进程内存使用情况,以及其他系统信息。

[root@localhost ~]$ top -c -d 1
top - 10:53:43 up 5 days, 22:29,  4 users,  load average: 0.18, 0.15, 0.14
Tasks: 255 total,   2 running, 252 sleeping,   0 stopped,   1 zombie
%Cpu0  : 10.2 us,  0.1 sy,  0.0 ni, 89.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  : 10.6 us,  0.1 sy,  0.0 ni, 89.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3884768 total,   14460 free,  1096524 used,  2743680 buff/cache
KiB Swap:  2097148 total,  1001480 free,  1095668 used.  834912 avail Mem

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      20   0 15032 1136 1100 S  0.3  0.0   0:00.30 systemd
    2 root      20   0     0    0    0 S  0.3  0.0   0:00.07 kthreadd
    3 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    4 root      20   0     0    0    0 S  0.0  0.0   0:00.00 rcu_bh
    5 root      20   0     0    0    0 S  0.0  0.0   0:00.00 rcu_sched
    6 root      20   0     0    0    0 S  0.0  0.0   0:00.00 migration/0
    8 root      20   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    9 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cpuhp/0
   10 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kdevtmpfs
   11 root      20   0     0    0    0 S  0.0  0.0   0:00.00 netns

ps

ps命令可以显示当前正在运行的进程及其内存使用情况。

[root@localhost ~]$ ps -aux | head -n 10
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   9776  1088 ?        Ss   May29   0:00 /sbin/init splash
root         2  0.0  0.0      0     0 ?        S    May29   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    May29   0:00 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S    May29   0:00 [rcu_bh]
root         5  0.0  0.0      0     0 ?        S    May29   0:00 [rcu_sched]
root         6  0.0  0.0      0     0 ?        S    May29   0:00 [migration/0]
root         7  0.0  0.0      0     0 ?        S    May29   0:00 [watchdog/0]
root         8  0.0  0.0      0     0 ?        S    May29   0:00 [cpuhp/0]
root         9  0.0  0.0      0     0 ?        S    May29   0:00 [kdevtmpfs]
root        10  0.0  0.0      0     0 ?        S    May29   0:00 [netns]

vmstat

vmstat命令可以显示系统的内存使用情况、交换情况、磁盘IO情况等。

[root@localhost ~]$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0   2216  1136  3275  1096524    0    0     0     0  207  420  3  1  95  1
 0  0   2216  1136  3275  1096524    0    0     0     0   66  412  0  1  98  1
 0  0   2216  1136  3275  1096524    0    0     0     0  237  407  2  2  94  2
 0  0   2216  1136  3275  1096524    0    0     0     0   91  397  2  1  96  1
 0  0   2216  1136  3275  1096524    0    0     0     0  194  410  1  2  95  2

cachestat

cachestat命令可以显示系统的缓存使用情况。

[root@