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

相关推荐
skywalk81632 小时前
通过下载Ubuntu ova文件在Virtual Box快速安装ubuntu
linux·运维·ubuntu·virtualbox
姚不倒2 小时前
HAProxy 系列(四):多中间件统一 VIP 入口 — 架构模式与最佳实践
运维·中间件·架构·haproxy
wuminyu2 小时前
JVM锁膨胀与Futex源码解析
java·linux·c语言·jvm·c++
happymade2 小时前
7000 台网络设备批量纳管 & 自动拓扑生成实战——MSRM3 完整操作流程与关键要点复盘
运维·服务器·网络·zabbix·grafana·msrm3
斑马1392 小时前
Linux软件编程学习笔记(十一)——HTTP协议
linux·笔记·学习
做萤石二次开发的哈哈2 小时前
萤石蓝海 AIoT 一站式工作台:海康LCD会议平板接入,多端大屏运维应用一站生成
运维·物联网·电脑·萤石开放平台·会议室管理·蓝海aiot一站式工作台·otap物模型
OpenPomeloxCommunity2 小时前
Linux驱动基础(一):模块机制的设计与实现
linux
Shadow(⊙o⊙)2 小时前
Linux网络——文件与网络的连接桥梁struct sock {
linux·运维·网络
其实防守也摸鱼2 小时前
教育信息技术应用创新---基础软件信息赛(题库)
大数据·运维·人工智能·web安全·自动化
新时代牛马3 小时前
Linux 性能调优与追踪完整篇:ftrace、perf、eBPF从采样到落地验证
linux·运维·服务器