其他分享
首页 > 其他分享> > 性能测试必备知识(6)- 如何查看“CPU 上下文切换”

性能测试必备知识(6)- 如何查看“CPU 上下文切换”

作者:互联网

做性能测试的必备知识系列,可以看下面链接的文章哦

https://www.cnblogs.com/poloyy/category/1806772.html

 

课前准备,安装 sysbench

下载 sysbench

git clone https://github.com/akopytov/sysbench.git

 

安装依赖

yum install autoconf automake libtool -y

 

编译安装

cd sysbench/
./autogen.sh
./configure --without-mysql
make && make install

 

百度云链接

链接:https://pan.baidu.com/s/1a9qR9GNzEbj1rkDp2wXfIw

提取码:kone

下载压缩包放到服务器,然后解压即可

 

如何查看系统的上下文切换情况

vmstat 

 

了解 vmstat 输出的参数含义

每隔 2s 输出一次结果

vmstat 2

这里我们只了解必备参数,后面有单独一篇文章展开来讲解 vmstat 命令

参数分析

vmstat 只给出了系统总体的上下文切换情况,如何查看每个进程详细情况?答案是通过 pidstat

 

通过 pidstat 查看进程上下文切换的情况

加上 -w 选项,每 3s 输出一次结果,共输出 3 次

pidstat -w 3 3

结果分析

 

自愿上下文切换

 

非自愿上下文切换

 

通过栗子去看上下文切换

前期准备

 

sysbench 介绍

 

空闲系统的上下文切换次数

输入以下命令,每 1 秒输出一次结果,输出 5 次

vmstat 1 5

结果分析

 

第一个终端运行 sysbench

输入以下命令,以 10 个线程运行 5 分钟的基准测试,模拟多线程切换的问题

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

 

第二个终端通过 vmstat 查看上下文切换

vmstat 1

结果分析

 

总结下

 

提出疑问

到底是什么进程导致了这些问题呢?

 

第三个终端通过 pidstat 来看进程的上下文切换次数

输入以下命令,-w 输出进程切换指标,-u 输出 CPU 使用情况

pidstat -w -u 1

结果分析

 

分析下为什么上下文切换次数会这么少

 

查看 pidstat 命令的作用

man pidstat

 

有那么一句英文,可以看到,pidstat 默认显示进程级别的指标数据

 

第三个终端重新执行 pidstat 命令

pidstat -wt 1 10

结果分析

sysbench 的多个线程的上下文切换次数有非常多,终于找到罪魁祸首了

 

分析为什么中断次数也颇高

前面也说到 in 值达到了 8w,那是什么导致中断次数如此之高呢,接下来瞧一瞧

 

首先

中断处理,它只发生在内核态,而 pidstat 只是一个进程的性能分析工具,并不提供任何关于中断的详细信息

 

如何查看中断发生的类型

从  /proc/interrupts  这个只读文件中读取

 /proc  实际上是 Linux 的一个虚拟文件系统,用于内核空间与用户空间之间的通信

 

继续在第三个终端执行命令

watch -d cat /proc/interrupts

结果分析

 

总结

中断次数升高还是因为多任务的调度问题,和前面线程上下文切换次数的分析结果是一致的

 

每秒上下文切换多少次才算正常?

 

深入分析

根据上下文切换的类型,具体分析

  1. 自愿上下文切换多了,说明进程都在等待资源,有可能发生了 I/O 等其他问题
  2. 非自愿上下文切换多了,说明进程都在被强制调度,也就是都在争抢 CPU,说明 CPU 的确成了瓶颈
  3. 中断次数变多了,说明 CPU 被中断处理程序占用,还需要通过 /pro/interrupts  文件来分析具体的中断类型

 

全文总结-如何查看分析上下文切换

 

标签:中断,必备,次数,pidstat,切换,上下文,CPU
来源: https://blog.51cto.com/u_12020737/2853902