Linux内存分析工具

本文旨在介绍Linux下分析内存的各种工具及其背后的原理。

背景

Linux 性能优化基础中引入了诸多内存性能分析工具,同时为了更好地理解Linux内核内存管理,需要对Linux下内存分析工具做一个简单分析。

free

bash 复制代码
$ free -m
              total        used        free      shared  buff/cache   available
Mem:           3909         890         222          29        2795        2715
Swap:             0           0           0
  • total:系统中总的内存,Mem指物理内存,Swap指交换分区
  • used:程序使用的内存
  • free:未被分配的物理内存大小
  • shared:共享内存大小,主要用于进程间通信
  • buff/cache:buff指的是buffers,用来给块设备做缓存,cache指的是page cache,用来给打开的文件做缓存,以提高文件访问速度
  • available:当内存短缺,系统可用回收buffers和page cache, a v a i l a b l e = f r e e + b u f f e r s + p a g e c a c h e − 不可回收的部分 available=free+buffers+page cache-不可回收的部分 available=free+buffers+pagecache−不可回收的部分

procfs

bash 复制代码
$ cat /proc/meminfo 
MemTotal:        4003144 kB
MemFree:          219916 kB
MemAvailable:    2772960 kB
Buffers:          329880 kB
Cached:          2095056 kB
SwapCached:            0 kB
Active:          1709508 kB
Inactive:        1456840 kB
Active(anon):     756224 kB
Inactive(anon):     2992 kB
Active(file):     953284 kB
Inactive(file):  1453848 kB
Unevictable:          64 kB
Mlocked:              64 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:               136 kB
Writeback:             0 kB
AnonPages:        741352 kB
Mapped:           618776 kB
Shmem:             30332 kB
KReclaimable:     438920 kB
Slab:             495000 kB
SReclaimable:     438920 kB
SUnreclaim:        56080 kB
KernelStack:        8656 kB
PageTables:        18856 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     2001572 kB
Committed_AS:    4880780 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       24664 kB
VmallocChunk:          0 kB
Percpu:             3168 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
FileHugePages:         0 kB
FilePmdMapped:         0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:      155296 kB
DirectMap2M:     4018176 kB
DirectMap1G:     2097152 kB

sysfs

bash 复制代码
$ ls /sys/devices/system/memory 
auto_online_blocks  memory1   memory13  memory3   memory35  memory39  memory42  memory46  memory7  probe
block_size_bytes    memory10  memory14  memory32  memory36  memory4   memory43  memory47  memory8  soft_offline_page
hard_offline_page   memory11  memory15  memory33  memory37  memory40  memory44  memory5   memory9  uevent
memory0             memory12  memory2   memory34  memory38  memory41  memory45  memory6   power

pcstat

hcache

hcache 在 pcstat基础上的改进,可以显示page cache的一些统计信息,通过它,你可以快速定位占用缓存最多的文件或进程,从而优化内存使用或排查异常问题。

bash 复制代码
./hcache --help
Usage of ./hcache:
  -bname
        convert paths to basename to narrow the output
  -histo
        print a simple histogram instead of raw data
  -json
        return data in JSON format
  -nohdr
        omit the header from terse & text output
  -pid int
        show all open maps for the given pid
  -plain
        return data with no box characters
  -pps
        include the per-page status in JSON output
  -terse
        show terse output
  -top int
        show top x cached files
  -unicode
        return data with unicode box characters

原理

hcache 通过解析 /proc 文件系统中的内存映射数据,结合页缓存统计信息,生成缓存报告。

vmtouch

参考

Linux 性能优化基础
hcache
pcstat

相关推荐
杭州龙立智能科技2 小时前
好用的物料转运小车价格哪家合理
运维
Gofarlic_OMS2 小时前
ANSYS许可证使用合规性报告自动化生成方案
大数据·运维·人工智能·3d·自动化·云计算
五仁火烧2 小时前
静态文件服务器和动态服务器
运维·服务器
H_z_q24012 小时前
RHCE的时间服务器与NTP、chrony
java·运维·服务器
oMcLin2 小时前
如何在Ubuntu 20.04上配置并调优Kubernetes集群,确保在多租户环境下的高可用性与资源分配?
linux·ubuntu·kubernetes
cc_beolus2 小时前
服务器介绍
运维·服务器
石头5302 小时前
Service 详解
linux
小鸡脚来咯2 小时前
Linux 服务器问题排查指南(面试标准回答)
linux·服务器·面试
末日汐3 小时前
磁盘与文件系统
linux·运维·数据库