CPU分析系列--性能测试时对进程上下文切换的分析

目录

1.从系统层面看:vmstat 1 3

2.从进程层面看:pidstat -w

3.从线程层面看上下文切换:pidstat -wt

4.案例:

        1.使用sysbench模拟多线程切换.

                yum install -y sysbench

                sysbench --threads=10 --max-time=300 threads run

                模拟10个线程,运行300s.

        2.查看系统平均负载:watch -d uptime.

        3.vmstat观察系统的cs(context switch)数据.

                r:可运行进程队列长度达到了10,超过系统cpu个数2,有大量cpu竞争.

                in:终端次数飙升

                cs:上下文切换次数从12次/s飙升至110万次/s.

                us+sy:≈100%,sy高达75%,说明内核占用cpu较高.

        4.使用pidstat -w观察进程级别的cs数据.

        5.使用pidstat -wt观察线程级别的cs数据.

5.案例分析:

       综上指标可得,系统的就绪队列中进程数较多,也就是运行中和等待cpu调度的进程数过多导致了大量的上下文切换,据查可知是sysbench频繁的上下文切换导致系统的cpu占用率过高.

6.针对上下文切换类型分析:

        1.如果cswh/s(自愿上下文切换)变多了,说明进程在资源等待,有可能发生了I/O瓶颈等问题.

        2.如果nvcswh/s(非自愿上下文切换)变多了,说明进程被强制剥离cpu调度,也就是众多进程在抢夺cpu,说明cpu成了瓶颈.

        3.in(中断)次数多了,说明cpu被中断处理程序占用,需要分析是哪种类型的中断.

                1.使用 watch -d cat /proc/interrupts查看cpu中断数据.

                 2.使用cpu使用率描述cpu的性能

                        a.top:查看系统总体cpu和内存使用情况,包括各进程的资源使用情况

                           top无法区分us%用户态cpu,sys%内核态cpu的使用情况.

                        b.pidstat 1 3:pidstat可查看用户态进程和内核态进程cpu使用情况.

                        c.ps:显示每个进程的资源使用情况.


vmstat:

vmstat命令可查看服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写等情况。这个命令是我查看Linux/Unix最喜爱的命令,相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样).

1.从系统层面看:vmstat 1 3

vmstat 1 3:每个1秒抓取一次,总共抓取3次. 

重点关注:

        r:        运行队列中进程数(就是说多少个进程正在运行或可运行) ,当这个值超过了CPU数目,

                   就会出现CPU瓶颈了.

        b:        表示阻塞的进程.

        swpd: 交换区内存已使用的大小,如果大于0,表示你的机器物理内存不足了.

        free:   空闲的物理内存的大小.

        cache:pagecache(页缓存)直接用来记忆我们打开的文件,给文件做缓冲,把空闲的物理内存的

                   一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时

                   buffer/cached会很快地被使用。

        si:  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露

        so:  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

        bi:系统上所有的磁盘和其他块设备每秒接收的块数量,1块=1kb

        bo: 块设备每秒发送的块数量.

        bi+bo值过大,且wa值较大,表明系统磁盘IO瓶颈.

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

        cs: 系统层面看每秒上下文切换次数.上下文切换次数过多表示你的CPU大部分浪费在上下文

                切换.

        in+cs越大,说明内核消耗cpu越多.

        us: 用户进程CPU时间

        sy: 系统CPU时间

        id:  空闲 CPU时间

        wa: 等待IO CPU时间,一般超过20%就说明I/O等待严重.

2.从进程层面看:pidstat -w

-u 默认的参数,显示各个进程的CPU使用统计
-r 显示各个进程的内存使用统计
-d 显示各个进程的IO使用情况
-p 指定进程号
-w 显示每个进程的上下文切换情况
-t 显示选择任务的线程的统计信息外的额外信息

        cswch/s:表示进程每秒自愿进行上下文切换的次数.

        nvcswch/s:表示进程每秒非自愿进行上下文切换的次数.

3.从线程层面看上下文切换:pidstat -wt

-w 显示每个进程的上下文切换情况
-t 显示选择任务的线程的统计信息外的额外信息

4.案例:

        1.使用sysbench模拟多线程切换.

                yum install -y sysbench

                sysbench --threads=10 --max-time=300 threads run

                模拟10个线程,运行300s.

        2.查看系统平均负载:watch -d uptime.

        3.vmstat观察系统的cs(context switch)数据.

                r:可运行进程队列长度达到了10,超过系统cpu个数2,有大量cpu竞争.

                in:终端次数飙升

                cs:上下文切换次数从12次/s飙升至110万次/s.

                us+sy:≈100%,sy高达75%,说明内核占用cpu较高.

        4.使用pidstat -w观察进程级别的cs数据.

                发现sysbench的cswch/s和nvcswh/s数据为0,那是因为pidsata默认查看的是进程级别的

                数据,sysbench发起的是线程负载,所以我们需要查看线程级别的数据.

        5.使用pidstat -wt观察线程级别的cs数据.

5.案例分析:

       综上指标可得,系统的就绪队列中进程数较多,也就是运行中和等待cpu调度的进程数过多导致了大量的上下文切换,据查可知是sysbench频繁的上下文切换导致系统的cpu占用率过高.

6.针对上下文切换类型分析:

        1.如果cswh/s(自愿上下文切换)变多了,说明进程在资源等待,有可能发生了I/O瓶颈等问题.

        2.如果nvcswh/s(非自愿上下文切换)变多了,说明进程被强制剥离cpu调度,也就是众多进程在抢夺cpu,说明cpu成了瓶颈.

        3.in(中断)次数多了,说明cpu被中断处理程序占用,需要分析是哪种类型的中断.

                1.使用 watch -d cat /proc/interrupts查看cpu中断数据.

                 2.使用cpu使用率描述cpu的性能

                        a.top:查看系统总体cpu和内存使用情况,包括各进程的资源使用情况

                           top无法区分us%用户态cpu,sys%内核态cpu的使用情况.

                        b.pidstat 1 3:pidstat可查看用户态进程和内核态进程cpu使用情况.

                        c.ps:显示每个进程的资源使用情况.

        

猜你喜欢

转载自blog.csdn.net/qq_40132294/article/details/121445765