0%

Linux内存性能分析

记录 Linux 内存性能分析相关工具及参数解析

vm

Linux 使用虚拟内存来管理分配内存空间,为了支持虚拟内存管理,需要

页面调度有不同的算法:

  • 局部页面置换算法

    分配给一个进程的物理页面数目确定,置换选择范围仅限于当前进程占用的物理页面

    • 最优算法
    • 先进先出算法 FIFO
    • 最近最久未使用算法 LRU
    • 时钟算法、最不常用算法 (LRU的近似)
  • 全局页面置换算法

    置换页面的选择范围是所有可换出的物理页面

    • 工作集算法
    • 缺页率算法

当出现大量页缺失时会造成 系统颠簸系统效能会急剧下降

free

读取 /proc/meminfo 文件中信息,显示内存相关信息

$ free
             total       used       free     shared    buffers     cached
Mem:         63444      38012      25432          4       4780      12312
-/+ buffers/cache:      20920      42524
Swap:            0          0          0

内存使用常见问题:

  • free 内存少
    和 Linux 内存使用设计有关,会尽量提高内存使用率,经常会把磁盘上的内容缓存到内存,用来加速。当内存不足时会释放缓存部分,让给真正需要的程序使用
  • buffer / cached
    • buffer 缓存的是磁盘文件的元数据,例如文件属性、目录结构等
    • cached 缓存的是真正的文件内容
  • 判断内存真正不足
    • 持续的内存换入换出
    • 较多的主缺页中断

      次缺页中断,是在内存中可以找到目标页
      主缺页中断,是在内存中找不到,需要到磁盘中找

vmstat

显示进程,内存,分页,IO,中断,CPU活动的信息

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1108572   2356 1506880    0    0    92    13  148  654  3  1 95  1  0
  • Procs(进程):
    • r: 运行队列中进程数量
    • b: 等待IO的进程数量
  • Memory(内存):
    • swpd: 使用虚拟内存大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器
    • free: 可用内存大小
    • buff: 用作缓冲的内存大小
    • cache: 用作缓存的内存大小
  • Swap:
    • si: 每秒从磁盘写到虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉
    • so: 每秒写入磁盘的虚拟内存大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉
  • IO:
    • bi: 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte
    • bo: 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整
  • 系统:
    • in: 每秒中断数,包括时钟中断
    • cs: 每秒上下文切换数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的
  • CPU(以百分比表示):
    • us: 用户进程执行时间,us的值比较高时,说明用户进程消耗的CPU时间多,如果长期大于50%,需要考虑优化程序
    • sy: 系统进程执行时间,sy的值比较高时,就说明内核消耗的CPU时间多;如果us+sy超过80%,就说明CPU的资源存在不足
    • id: 空闲时间(包括IO等待时间)
    • wa: 等待IO时间,wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重

重点关注指标

  • r 运行的进程比较多,系统繁忙
  • bo 磁盘写的数据量大
  • us 持续大于50,服务器高峰可以接受
  • wa IO等待,持续大于30,说明IO等待严重
  • id 持续小于50,服务器高峰可以接受

Ref

  1. Linux性能分析