内存分析
Mem:**used 使用的物理内存总量
Mem:**free 空闲内存总量
Mem:**buffers 用作内核缓存的内存量
Mem:**cached 缓冲的交换区总量
Swap:**total 交换区总量
Swap:**used 使用的交换区总量
Swap:**free 空闲交换区总量
系统内存定位分析
OOM机制:Out Of Memory Killer,是Linux内核的一种内存管理机制,在系统可用内存较少的情况下,内核为保证系统还能够继续运行下去,会选择杀掉一些进程释放掉一些内存。
触发流程:进程A想要分配物理内存》触发缺页异常》内核去分配物理内存(已经把可以清到磁盘上的缓冲都清了一次)》物理内存不够了》触发OOM。
OOM功能:当系统物理内存不足时,oom_killer遍历当前所有进程,根据进程的内存使用情况进行打分,然后从中选择一个分数最高的进程,杀之取内存。
swap:类似Windows虚拟内存,当内存不够时,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。但它速度比物理内存慢。
swap大小设置:根据你系统内存的大小,以及所使用的程序,自行决定交换分区的大小,甚至可以完全不用交换分区。
buffer和cache
cache:将CPU最为频繁访问的数据保存在特定区域,并具有优先访问权,这样提高CPU对数据的获取效率来提高程序的运行效率
buffer:为了协调IO和CPU之间的速度不一致而存在,减少CPU中断次数,提高程序效率
两者都属于内存的一部分。
模块 | 类型 | 度量方法 | 衡量标准 |
内存 | 使用情况 | 1.free命令查看使用情况 2.vmstat命令查看使用情况 3.Sar -r命令查看使用情况 4.ps命令查看使用情况 | 注意>=50% 告警>=70% 严重>=80% |
内存 | 满载 | 1.vmstat的si/so比例辅助swapd和free利用 2.sar -W查看次缺页数 3.查看内核日志有无OOM机制kill进程 4.dmesg|grep killed | 1.so数值大,且swapd已经占比很高,内存肯定已经饱和 2.Sar 命令次缺页多意味已经在不停地与swap打交道,证明内存已经饱和 3.当内存不够用才会触发内核的OOM机制 |
内存 | 错误 | 1.查看内核有无physical failures 2.通过工具如valgrind等进行检查 | 有计数 |
vmstat命令结果解析,参考:http://www.ha97.com/4512.html
Vmstat 2 1 第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数
r:表示运行队列(多少个进程分配到CPU)
b:阻塞的进程
swapd:虚拟内存已使用的大小,如果大于0表示物理内存不足
free:空闲物理内存的大小
buff:缓冲内存
Swap:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗
si:每秒从交换区写到内存的大小,由磁盘调入内存
so:每秒写入交换区的内存大小,由内存调入磁盘
IO:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大
bi: 每秒读取的块数
bo: 每秒写入的块数
System:下面2个值越大,会看到由内核消耗的CPU时间会越大
in: 每秒中断数,包括时钟中断
cs: 每秒上下文切换数
CPU:
us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速;
sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因;
wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)
us: 用户进程执行时间百分比(user time)
sy: 内核系统进程执行时间百分比(system time)
wa: IO等待时间百分比
Memory(内存):
inact: 非活跃内存大小(当使用-a选项时显示)
active: 活跃的内存大小(当使用-a选项时显示)