内存性能分析速查

Aug 28, 2020 22:30 · 516 words · 2 minute read Linux

内存性能指标

  • 系统内存指标
    • 已用内存
    • 剩余内存
    • 共享内存 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 内存泄漏检测

分析思路

  1. free/top 查看系统整体的内存使用情况
  2. vmstat/pidstat 查看趋势,判断出问题类型
  3. 详细分析
    • 内存分配
    • Cache/Buffer
    • 进程内存使用情况

优化思路

  • Swap 能禁就禁,不能禁就尽量减小 /proc/sys/vm/swappiness 来降低使用 Swap 的倾向
  • 减少内存的动态分配,使用内存池、大页
  • 尽量使用 Cache/Buffer 来访问数据
  • 利用 cgroups 限制进程的内存使用情况,确保系统内存不被异常进程耗尽
  • 调整 /proc/pid/oom_adj 降低核心应用被 OOM 干掉的可能性