vmstat 深入浅出

                vmstat 是linux查看 CPU , 内存运行状态的入门工具,  把其作为性能诊断工具也是很强大。以此文做个记录.


1. 术语背景

(1)  打工仔--CPU

       CPU 很无辜,是个任劳任怨的打工仔,每时每刻都有工作在做(进程、线程)并且自己有一张工作清单(可运行队列),由老板(进程调度)来决定他该干什么,他需要和老板沟通以便得到老板的想法并及时调整自己的工作(上下文切换),部分工作做完以后还需要及时向老板汇报(中断),所以打工仔(CPU)除了做自己该做的工作以外,还有大量时间和精力花在沟通和汇报上。


(2)  page cache , buffer cache 傻傻分不清?

        page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到page cache,如果直接采用dd等工具对磁盘进行读写,那么数据会缓存到buffer cache


(3) 虚拟内存是啥?

         虚拟内存 物理内存 + swap


2. vmstat


执行: vmstat 2



看不懂? 下面开始分析每个字段:

§ r 可运行队列的线程数,这些线程都是可运行状态,只不过 CPU 暂时不可用;

§ b 被 blocked 的进程数,正在等待 IO 请求; 

§ swpd,已使用的 SWAP 空间大小,KB 为单位;

§ free,可用的物理内存大小,KB 为单位;

§ buff,物理内存用来缓存读写操作的 buffer 大小,KB 为单位;

§ cache,物理内存用来缓存进程地址空间的 cache 大小,KB 为单位;

§ si,数据从 SWAP(磁盘) 读取到 RAM(swap in)的大小,KB 为单位;

§ so,数据从 RAM 写到 SWAP(磁盘)(swap out)的大小,KB 为单位;

§ bi,磁盘块从文件系统或 SWAP 读取到 RAM(blocks in)的大小,block 为单位;

§ bo,磁盘块从 RAM 写到文件系统或 SWAP(blocks out)的大小,block 为单位;

§ in 每秒CPU的中断次数,包括时间中断

§ cs 每秒上下文切换次数

§ us 用户占用 CPU 的百分比

§ sy 内核和中断占用 CPU 的百分比

§ id  空闲 CPU时间

§ Wt 所有可运行的线程被 blocked 以后都在等待 IO,这时候 CPU 空闲的百分比


3. 问题排查

     如何根据vmstat 排查问题呢?


   (1 ) 可运行队列线程数r太大 ? 

         每个可运行队列不应该超过3个线程(每个CPU核心),比如:双核心理器系统的可运行队列里不应该超过6个线程。理论最大单核> 5,CPU是瓶颈!

 

 (2)Swapd si so 不为0 ?

     这个通常是内存不足的信号,正常情况下这3个字段都会是0 ,表示IO操作没操作到swap分区,系统没有进行swap in/out操作。如果内存不足,系统就会临时操作到swap分区,严重会导致系统崩溃。

   

  (3) free 太小 ,cache 太大?

    free 正常情况下最好保持几百M的预留,如果free太小,也可能引起程序异常,虽然此时cached增长很快,容量很大。

    可以手动释放cached容量

echo 3 > /proc/sys/vm/drop_caches  

也可以修改限制最小预留大小:

echo xxx > /proc/sys/vm/min_free_kbytes  修改限制free 最小值

 

  (4) buff 持续减少?

      buff 稳步减少说明系统知道内存不够了,kwapd 正在从 buff 那里借用部分内存
    

 (5) c太大 ?

     进程切换成本大概平均是30us(微妙)一次,假如每秒8W的切换平均到每个核上(16核机器)5000次每秒,耗费时间是5000*30us=150ms,也就是说有15%的时间耗费在进程切换上,如果这时候的iowait最高才1.5%,也就是说相比iowait此时进程切换带来的影响更大

      另外:

       context switchcs)比 interruptsin)要高得多,说明内核不得不来回切换进程.


    (6) sy >> us  ?

        system timesy)很高而 user timeus)很低,而且加上高频度的上下文切换(cs),说明正在运行的应用程序调用了大量的系统调用(system call

   system timesy)一直保持在 80% 以上,而且上下文切换较低(cs),说明某个进程可能一直霸占着 CPU(不断请求资源)

 

  (7)  中断太高?

   interruptsin)非常高,context switchcs)比较低,说明这个 CPU 一直在不停的请求资源.



 

4. 更多参考:


http://www.cnblogs.com/ggjucheng/archive/2012/01/05/2312625.html

 

http://soft.chinabyte.com/os/50/12301550.shtml

 

http://www.vpsee.com/2009/11/linux-system-performance-monitoring-memory/

 

http://www.searchtb.com/2013/02/iowait_why_and_optimization.html




   





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值