记一次内存占用高的分析
首先查询系统占用
[root@ ~]# free -g
total used free shared buff/cache available
Mem: 510 488 11 0 11 19
Swap: 0 0 0
然后查看下内存压力,0.65%,也很低
[root@ ~]# sar -r 1
Linux 4.19.0-1.0.0.14 02/17/2025 _x86_64_ (64 CPU)
07:49:51 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
07:49:52 PM 11758324 523925116 97.80 1121476 9257832 3490700 0.65 4426740 6346840 0
07:49:53 PM 11758324 523925116 97.80 1121476 9257832 3490700 0.65 4426740 6346840 0
07:49:54 PM 11758600 523924840 97.80 1121476 9257832 3490700 0.65 4426744 6346840 0
^C
07:49:55 PM 11757824 523925616 97.81 1121476 9257832 3490700 0.65 4426440 6346840 0
Average: 11758268 523925172 97.80 1121476 9257832 3490700 0.65 4426666 6346840 0
查看进程占用内存,进程占用都很低
[root@ ~]# ps aux | head -n 1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
[root@ ~]# ps aux | sort -k4nr | head -n 10
dbus 32889 0.0 0.0 58204 4188 ? Ss Feb14 0:27 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
ntp 32923 0.0 0.0 25740 4424 ? Ss Feb14 0:00 /usr/sbin/ntpd -u ntp:ntp -g
polkitd 32880 0.0 0.0 612284 10788 ? Ssl Feb14 0:11 /usr/lib/polkit-1/polkitd --no-debug
root 10 0.0 0.0 0 0 ? S Feb14 0:00 [ksoftirqd/0]
root 1 0.0 0.0 52120 5324 ? Ss Feb14 1:11 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 101 0.0 0.0 0 0 ? I< Feb14 0:00 [kworker/17:0H-k]
root 102 0.0 0.0 0 0 ? S Feb14 0:00 [cpuhp/18]
root 103 0.0 0.0 0 0 ? S Feb14 0:00 [migration/18]
root 10317 0.0 0.0 0 0 ? I< Feb14 0:00 [kworker/54:1H-k]
root 104 0.0 0.0 0 0 ? S Feb14 0:00 [ksoftirqd/18]
然后分析/proc/meminfo
cat /proc/meminfo
MemTotal: 535683440 kB # 系统总内存 ≈ 510.92 GB
MemFree: 11747840 kB # 当前完全空闲的内存 ≈ 11.20 GB
MemAvailable: 20659952 kB # 实际可用内存(含缓存回收)≈ 19.70 GB
Buffers: 1123940 kB # 内核缓冲区(临时块设备读写)≈ 1.07 GB
Cached: 9270536 kB # 文件缓存(可回收)≈ 8.84 GB
SwapCached: 0 kB # 交换缓存(当前未使用交换空间)≈ 0.00 GB
Active: 4421184 kB # 最近活跃内存 ≈ 4.22 GB
Inactive: 6358736 kB # 最近不活跃内存 ≈ 6.06 GB
Active(anon): 367824 kB # 活跃匿名内存(进程堆栈等)≈ 0.35 GB
Inactive(anon): 1148 kB # 不活跃匿名内存 ≈ 0.00 GB
Active(file): 4053360 kB # 活跃文件缓存 ≈ 3.87 GB
Inactive(file): 6357588 kB # 不活跃文件缓存 ≈ 6.06 GB
Unevictable: 0 kB # 不可回收内存(如mlock锁定)≈ 0.00 GB
Mlocked: 0 kB # mlock锁定的内存 ≈ 0.00 GB
SwapTotal: 0 kB # 交换空间总量(未启用)≈ 0.00 GB
SwapFree: 0 kB # 剩余交换空间 ≈ 0.00 GB
Dirty: 4108 kB # 等待写回磁盘的内存 ≈ 0.00 GB
Writeback: 272 kB # 正在写回磁盘的内存 ≈ 0.00 GB
AnonPages: 384732 kB # 匿名页(进程私有内存)≈ 0.37 GB
Mapped: 337752 kB # 文件映射内存(如库文件)≈ 0.32 GB
Shmem: 10284 kB # 共享内存(如tmpfs)≈ 0.01 GB
Slab: 1706436 kB # 内核Slab缓存 ≈ 1.63 GB
SReclaimable: 723796 kB # 可回收的Slab缓存 ≈ 0.69 GB
SUnreclaim: 982640 kB # 不可回收的Slab缓存 ≈ 0.94 GB
KernelStack: 20096 kB # 内核栈使用量 ≈ 0.02 GB
PageTables: 14632 kB # 页表内存 ≈ 0.01 GB
NFS_Unstable: 0 kB # NFS不稳定页(未使用)≈ 0.00 GB
Bounce: 0 kB # 回弹缓冲区(旧内核特性)≈ 0.00 GB
WritebackTmp: 0 kB # FUSE写回缓存 ≈ 0.00 GB
CommitLimit: 14086328 kB # 系统承诺内存上限 ≈ 13.43 GB
Committed_AS: 3457604 kB # 已分配内存总量 ≈ 3.30 GB
VmallocTotal: 34359738367 kB # 虚拟内存地址空间总量(理论值)≈ 32,768.00 GB
VmallocUsed: 0 kB # 已用虚拟内存 ≈ 0.00 GB
VmallocChunk: 0 kB # 虚拟内存最大连续块 ≈ 0.00 GB
Percpu: 46592 kB # Per-CPU内存(如调度器数据)≈ 0.04 GB
HardwareCorrupted: 0 kB # 硬件损坏内存(ECC错误)≈ 0.00 GB
AnonHugePages: 0 kB # 透明大页(THP)≈ 0.00 GB
ShmemHugePages: 0 kB # 共享内存大页 ≈ 0.00 GB
ShmemPmdMapped: 0 kB # 共享内存PMD映射 ≈ 0.00 GB
HugePages_Total: 0 # 大页总数(未配置)≈ 0
HugePages_Free: 0 # 空闲大页 ≈ 0
HugePages_Rsvd: 0 # 预留大页 ≈ 0
HugePages_Surp: 0 # 大页溢出计数 ≈ 0
Hugepagesize: 2048 kB # 单个大页大小 = 2 MB
Hugetlb: 507510784 kB # 大页内存池总量 ≈ 483.84 GB
DirectMap4k: 1346072 kB # 4KB页映射内存 ≈ 1.28 GB
DirectMap2M: 15341568 kB # 2MB页映射内存 ≈ 14.63 GB
DirectMap1G: 520093696 kB # 1GB页映射内存 ≈ 496.00 GB
从/proc/meminfo看大概是大页占用的内存,Hugetlb显示大约为483G
然后看下大页使用情况。
查看下系统支持的大页格式
[root@ ~]# ll /sys/kernel/mm/hugepages/
total 0
drwxr-xr-x 2 root root 0 Feb 11 10:41 hugepages-1048576kB #1GB的大页
drwxr-xr-x 2 root root 0 Feb 11 10:41 hugepages-2048kB #2MB的大页
[root@ ~]# cat /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages
484 #显示1G内存大页配置了484个。
查看下numa设置
# numactl --hardware
available: 2 nodes (0-1) # 系统有2个NUMA节点,编号0和1
node 0 cpus: 0 1 2 3 ... 31 # 节点0管理的CPU核(共32个,0-31)
node 0 size: 261221 MB # 节点0总内存 ≈ 255.10 GB
node 0 free: 9241 MB # 节点0剩余内存 ≈ 9.03 GB
node 1 cpus: 32 33 34 ... 63 # 节点1管理的CPU核(共32个,32-63)
node 1 size: 261906 MB # 节点1总内存 ≈ 255.77 GB
node 1 free: 13255 MB # 节点1剩余内存 ≈ 12.94 GB
node distances: # NUMA节点间访问延迟(数值越大,延迟越高)
node 0 1
0: 10 22 # 节点0访问自身延迟为10,访问节点1延迟为22
1: 22 10 # 节点1访问自身延迟为10,访问节点0延迟为22
然后查看下各个numa节点的大页设置:
[root@ hugepages-1048576kB]# grep -H '.' /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/*
/sys/devices/system/node/node0/hugepages/hugepages-1048576kB/free_hugepages:0 #节点0当前空闲的1GB大页数量 = 0(已全部使用)
/sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages:243 #节点0已配置的1GB大页总数 = 243(包括已用和空闲)
/sys/devices/system/node/node0/hugepages/hugepages-1048576kB/surplus_hugepages:0 #节点0临时分配的溢出大页数 = 0(无溢出)
[root@ hugepages-1048576kB]# grep -H '.' /sys/devices/system/node/node1/hugepages/hugepages-1048576kB/*
/sys/devices/system/node/node1/hugepages/hugepages-1048576kB/free_hugepages:0 #节点1当前空闲的1GB大页数量 = 0(已全部使用)
/sys/devices/system/node/node1/hugepages/hugepages-1048576kB/nr_hugepages:241 #节点1已配置的1GB大页总数 = 241(包括已用和空闲)
/sys/devices/system/node/node1/hugepages/hugepages-1048576kB/surplus_hugepages:0 #节点1临时分配的溢出大页数 = 0(无溢出)