linux性能分析命令-vmstat

部分内容转载自:https://www.cnblogs.com/ftl1012/p/vmstat.html

vmstat

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。

命令:vmstat   1  2     

说明:每秒采样1次,共采集2次

linux性能分析命令-vmstat

 1)procs

a)r列表示运行和等待CPU时间片的进程数。

CPU分析:这个值如果长期大于CPU逻辑颗数,则说明CPU资源不足,可以考虑增加CPU;

附:CPU逻辑个数命令为    cat /proc/cpuinfo |grep "processor"|wc -l

b)b列表示在等待资源的进程数,比如正在等待I/O或者内存交换等;

2)memory

a)swpd列表示切换到内存交换区的内存数量(以KB为单位)。如果swpd的值不为0或者比较大(此处不理解),而且si、so的值长期为0,那么这种情况一般不用担心,不会影响系统性能;

b)free列表示当前空闲的物理内存数量(以KB为单位);

c)buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲;

d)cache列表示page cached的内存数量,一般作文件系统的cache,频繁访问的文件都会被cache。如果cache值较大,就说明cached文件数较多。如果此时IO中的bi比较小,就说明文件系统效率比较好。

3)swap

a)si列表示由磁盘调入内存,也就是内存交换区进入内存的数量;

b)so列表示由内存调入磁盘,也就是内存进入内存交换区的数量;

内存分析:

si、so2个值长期为0,则无内存方面性能问题;

如果si、so这2个值长期大于0,此时系统性能会受到影响,磁盘IO和CPU资源都会被消耗;需要考虑增加系统内存;

如果so数值大,且swpd占比很高,表示内存已经饱和;需要考虑增加系统内存;

4)IO

a)bi列表示从块设备读入的数据总量(即读磁盘,单位KB/秒)

b)bo列表示写入到块设备的数据总量(即写磁盘,单位KB/秒)

IO分析:这里设置的bi+bo参考值为1000,如果超过1000,而且wa值比较大,则表示系统磁盘IO性能瓶颈。(需根据具体硬件性能评估)

内存分析:如果bi、bo这个值长期不为0,说明内存可能有问题,因为没有用到缓存(当然不排除直接I/O的情况,但一般很少直接I/O的)

 

5)system

a)in列表示在某一时间间隔中观察到的每秒设备中断数,包括时钟中断;

b)cs列表示每秒产生的上下文切换次数;

上面这两个值越大,会看到内核消耗的CPU时间就越多;

6)cpu

a)us列显示了用户进程消耗CPU的时间百分比;

b)sy列显示了内核进程消耗CPU的时间百分比。sy的值比较高时,就说明内核消耗的CPU时间多;

CPU分析:如果us+sy超过80%,就说明CPU资源存在不足。

c)id列显示了CPU处在空闲状态的时间百分比;

d)wa列表示IO等待所占的CPU时间百分比。wa值越高,说明IO等待越严重。

IO分析:如果wa值超过20%,说明IO等待严重。

e)st列一般不关注,虚拟机占用的时间百分比。

经验总结:

1)cpu一般被充分利用的大概范围

us:65%-70%

sy:30%-35%

id:0-5%

2)procs中的r运行队列数不要超出每个处理器3个可运行状态线程的限制。(不理解)

3)sy如果高,一般是in(中断)和cs(上下文切换),可根据情况开启RPS或者减少应用的线程池。(不理解)

 

附:参数

1)vmstat -a 2 5  【-a 显示活跃内存(active)和非活跃内存(inact)】

linux性能分析命令-vmstat

2)vmstat -f  【-f 显示从系统启动至今的fork数量--linux下创建进程的系统调用是fork】

linux性能分析命令-vmstat

说明:信息是从 /proc/stat 中的processes 字段里取得的 

3)vmstat -s   【-s 显示内存相关统计信息及多种系统活动数量,可查看到内存使用的详细信息】

linux性能分析命令-vmstat

说明:这些信息分别来自于/proc/meminfo, /proc/stat 和 /proc/vmstat

4)vmstat -d  【-d 查看磁盘的读写】

linux性能分析命令-vmstat

说明:这些信息主要来自于 /proc/diskstats

5) vmstat -p /dev/sda1  【-p 显示指定磁盘分区(如/dev/sda1)读写的统计信息】

linux性能分析命令-vmstat

说明:这些信息主要来自于 /proc/diskstats 

reads:来自于该分区读的次数;

read sectors:来自于该分区的读扇区的次数;

writes:来自于该分区写的次数;

requested writes:来自于该分区的写请求次数;

6) vmstat -m  【-m 查看系统的slab信息】

linux性能分析命令-vmstat

说明:这些信息主要来自于 /proc/slabinfo

slab:由于内核会有许多小对象,这些对象构造销毁十分频繁,比如i-node,dentry,这些对象如果每次构建的时候就向内存要一个页(4kb),这样就会非常浪费,为了解决这个问题,就引入了一种新的机制来处理在同一个页框中如何分配小存储区,而slab可以对小对象进行分配,这样就不用为每一个对象分配页框,从而节省了空间,内核对一些小对象创建析构很频繁,slab对这些小对象进行缓冲,可以重复利用,减少内存分配次数。

7)

linux性能分析命令-vmstat