前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软件性能测试(连载8)

软件性能测试(连载8)

作者头像
顾翔
发布2020-02-19 15:34:23
7940
发布2020-02-19 15:34:23
举报
文章被收录于专栏:啄木鸟软件测试
10)上下文切换

CPU依次处理上述任务的调度方法是切换。切换分为“进程切换”“线程切换”和“中断切换”。中断切换即在本节“软中断与硬中断”中提及的,当系统中有非常重要的请求来临,CPU停止手头工作,触发硬中断。“进程切换”和“线程切换”,在切换前都要调取上次保存的信息,在切换后都要保存当前的信息。“进程切换”和“线程切换”合在一起叫做上下文切换(context switches)。图3-21为当前仅有2个任务等待CPU处理下的进程下文切换。

图3-21 进程上下文切换

由此可见上下文切换的优点在于,每个进(线)程具有同等的CPU处理权利,缺点是进(线)程的保存和载入消耗资源。由于线程信息比进程信息要少,所以线程上下文切换优于进程上下文切换。等待的进(线)程,位于CPU的最外层Ring3,而当前正在处理的进(线)程位于CPU内核,即Ring0,如图3-22所示。

图3-22 等待CPU处理的进程和正在CPU处理的进程所处CPU位置

可以通过命令vmstat interval count来查看CPU的中断数和进线程上下文切换数。在这里interval为多长描述输出一次,count为总共输出的次数。比如:“vmstat5 3”表示每5s输出一次,总共输出3次。

#vmstat 1 1

procs -----------memory---------- ---swap-- -----io-----system-- ------cpu-----

r b swpd free buff cache si so bi bo in cs us sy id wa st

0 0 0 7005360 91564 818900 0 0 0 0 25 33 0 0 1000 0

这里的输出含义见表3-6所示。

表3-6 vmstat命令输出详解

总标识

标识

意义

process

r

展示了正在执行和等待CPU资源的任务个数。当这个值超过了CPU个数,就会出现CPU瓶颈

b

每秒VMM等待队列的核心线程平均数

system

in

在某一段时间间隔中观察到的每秒设备中断数

cs

在某一段时间间隔中观察到的每秒上下文切换数

CPU

us

用户方式下花费的百分比

sy

系统方式下执行一个进程花费的百分比

id

没有使用本地磁盘I/O时CPU空闲或等待时间百分比

wa

等待I/O CPU时间百分比

在System中cs就表述在某一段时间间隔内每秒上下文切换的个数。上下文切换又分为自愿上下文切换(voluntary context switches)和非自愿上下文切换(non voluntary context switches)两种。自愿上下文切换是指到了切换时间点,进(线)程由于所需的资源不足,比如没有获得进(线)程处理所需的数据而资源CPU让出去,去处理其他进(线)程而非自愿上下文切换是指指到了切换时间点,没有数据资源不足的情形发生,此进(线)程不得不把CPU资源让出来去处理其他正在等待的进(线)程。所以当自愿上下文切换比较多,说明I/O或者内存存在瓶颈;而非自愿上下文切换比较多,说明目前有很多进(线)程需要CPU处理。可以通过命令pidstat(需要安装sysstat插件)查看自愿上下文切换和非自愿上下文切换。

#每隔 5 秒输出 1 组数据

#pidstat -w 5

Linux 4.15.0 (ubuntu) 09/23/18 _x86_64_ (2 CPU)

08:18:26 UID PID cswch/snvcswch/s Command

08:18:31 0 1 0.20 0.00 systemd

08:18:31 0 8 5.40 0.00 rcu_sched

...

这里的cswch/s和nvcswch/s就表示每秒自愿上下文切换和非自愿上下文切换个数。

11)perf top和perf record命令

perf top命令可以显示占用 CPU 时钟最多的函数或者指令,因此可以用来查找热点函数。如图3-23所示。

图3-23 perf top

perf top 虽然实时展示了系统的性能信息,但它的缺点是并不保存数据,也就无法用于离线或者后续进行分析。

perf record 则提供了保存数据的功能,保存后的数据,需要用 perf report 解析展示。

注意:并不是所有的函数或指令都可以用perf top或perf record获得的。

12)短时进程

对于一些仅存在几毫秒的进程,当数量很大的时候也会给CPU带来很大的负载,而这些进程基本上用top或ps命令很难被获取到,这个时候就需要使用execsnoop命令了。这个命令工具可以通过https://github.com/brendangregg/perf-tools/blob/master/execsnoo获得。

13)显示10个消耗CPU最多的进程

可以通过ps aux|sort -rnk +3|head -10查看10个消耗CPU最多的进程。

#ps aux|sort -rnk +3|head -10

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 99 0.0 0.0 0 0? S 08:18 0:00 [scsi_eh_20]

root 98 0.0 0.0 0 0? S 08:18 0:00 [scsi_eh_19]

root 97 0.0 0.0 0 0? S 08:18 0:00 [scsi_eh_18]

root 96 0.0 0.0 0 0? S 08:18 0:00 [scsi_eh_17]

root 95 0.0 0.0 0 0? S 08:18 0:00 [scsi_eh_16]

root 94 0.0 0.0 0 0? S 08:18 0:00 [scsi_eh_15]

root 93 0.0 0.0 0 0? S 08:18 0:00 [scsi_eh_14]

root 92 0.0 0.0 0 0? S 08:18 0:00 [scsi_eh_13]

root 91 0.0 0.0 0 0? S 08:18 0:00 [scsi_eh_12]

14)在多CPU的系统里,查看所有CPU的信息

可以使用mpstat查看多CPU的系统里中的信息。

#mpstat

Linux 4.15.0-46-generic(ubuntu) 10/30/2019 _x86_64_(4 CPU)

02:59:04 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle

02:59:04 AM all 15.29 4.91 17.24 2.76 0.00 1.08 0.00 0.00 0.00 58.71

15)小结

本节所涉及的概念有CPU负载、CPU使用率、不可中断的睡眠态进程、僵尸进程、CPU状态转换、软中断与硬中断、CPU节拍率和上下文切换。涉及到的命令有uptime、/proc/cpuinfo、top、dstat、pstree、/proc/softirqs、ps aux | grep softirq、watch、sar -n DEV 1、grep 'CONFIG_HZ=' /boot/config-$(uname -r)、vmstat、pidstat、perf top、perf record、execsnoop、ps aux|sort -rnk +3|head -10 和 mpstat。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 10)上下文切换
  • 11)perf top和perf record命令
  • 12)短时进程
  • 13)显示10个消耗CPU最多的进程
  • 14)在多CPU的系统里,查看所有CPU的信息
  • 15)小结
相关产品与服务
流计算 Oceanus
流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的企业级实时大数据分析平台,具备一站开发、无缝连接、亚秒延时、低廉成本、安全稳定等特点。流计算 Oceanus 以实现企业数据价值最大化为目标,加速企业实时化数字化的建设进程。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档