内存性能分析速查
Aug 28, 2020 22:30 · 516 words · 2 minute read
内存性能指标
- 系统内存指标
- 已用内存
- 剩余内存
- 共享内存 tmpfs
- 可用内存
- 剩余内存
- 可回收内存
- Cache
- 页缓存
- Slab 分配器中的可回收内存
- Buffer 对原始磁盘设备的临时存储
- 进程内存指标
- 虚拟内存
- 代码段
- 数据段
- 共享内存
- 已经申请的堆内存
- 已经换出的内存
- 常驻内存 进程实际使用的物理内存
- 物理内存
- 独占内存
- 共享内存
- Swap 内存
- 缺页异常
- 主缺页异常 需要磁盘 I/O 介入
- 次缺页异常 直接从物理内存中分配
- 虚拟内存
- Swap
- 已用空间
- 剩余空间
- 换入速度
- 换出速度
根据工具查指标
工具 | CPU 性能指标 |
---|---|
free /proc/meminfo |
系统已用、可用、剩余内存以及 Cache/Buffer 用量 |
top ps |
进程虚拟、常驻、共享内存及缺页异常 |
vmstat | 系统剩余内存、Cache、Buffer、换入换出 |
sar | 系统内存换页情况、内存使用率、 Cache/Buffer 用量以及 Swap 使用情况 |
cachestat | 系统 Cache/Buffer 命中率 |
cachetop | 进程 Cache/Buffer 命中率 |
slabtop | 系统 Slab 缓存使用情况 |
/proc/pid/status | 进程 Swap 内存等 |
/proc/pid/smaps /proc/pid/pmap |
进程地址空间和内存状态 |
valgrind | 进程内存错误检查器,检测内存初始化、泄漏、越界访问等各种内存错误 |
memleak | 内存泄漏检测 |
分析思路
- free/top 查看系统整体的内存使用情况
- vmstat/pidstat 查看趋势,判断出问题类型
- 详细分析
- 内存分配
- Cache/Buffer
- 进程内存使用情况
优化思路
- Swap 能禁就禁,不能禁就尽量减小 /proc/sys/vm/swappiness 来降低使用 Swap 的倾向
- 减少内存的动态分配,使用内存池、大页
- 尽量使用 Cache/Buffer 来访问数据
- 利用 cgroups 限制进程的内存使用情况,确保系统内存不被异常进程耗尽
- 调整 /proc/pid/oom_adj 降低核心应用被 OOM 干掉的可能性