vmstat、sysbench、/proc/interrupts,性能压测

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

vmstat 是一个常用的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析 CPU 上下文切换和中断的次数。

# 每隔 5 秒输出 1 组数据
vmstat 5procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r  b 交换 空闲 缓冲 缓存   si   so    bi    bo   in   cs us sy id wa st0  0      0 8090200 959848 5225828    0    0    15    14  150  126  6  1 93  0  00  0      0 8114904 959872 5201488    0    0     0   270 2056 7736  4  2 94  0  0

重点关注:

cs(context switch):每秒上下文切换的次数

in(interrupt):每秒中断的次数

r(running or runnable):就绪队列长度,即正在运行和等待CPU的进程数

b(blocked):处于不可中断睡眠状态的进程数

vmstat只给出系统总体的上下文切换情况,可以用pidstat -w查看每个进程上下文切换的情况。

重点关注:

cswch:每秒自愿上下文切换的次数,指的是进程无法获取所需资源导致的上下文切换,如I/O、内存等系统资源 不足

ncswch:每秒非自愿上下文切换的次数,指的是时间片耗尽等其他原因,被系统强制调度发生的上下文切换,如大量进程抢夺CPU。

# 每隔5秒输出1组数据
dyy@dyy-Lenovo-ThinkBook-14-IIL:~$ pidstat -w 5
Linux 5.4.0-74-generic (dyy-Lenovo-ThinkBook-14-IIL) 	20210911_x86_64_(8 CPU)
193603秒   UID       PID   cswch/s nvcswch/s  Command
1936080         1    259.28      0.20  systemd
1936080     22496      3.79      0.00  kworker/6:0-events
1936080     22508      2.20      0.00  kworker/4:3-events
1936081000     22606      0.20      0.00  pidstat

模拟压测

# 以 10 个线程运行 5 分钟的基准测试,模拟多线程切换的问题
$ sysbench --threads=10 --max-time=300 threads run

运行之后,在另外一个终端上可以看出:
cs突然增加了许多:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r  b 交换 空闲 缓冲 缓存   si   so    bi    bo   in   cs us sy id wa st0  0      0 6177232 992200 6797896    0    0     0     0 2376 7604  6  2 92  0  00  0      0 6191628 992208 6783560    0    0     0    52 2136 6504  4  2 94  0  09  0      0 6206244 992208 6767868    0    0     0     0 2176 204091  6  9 84  0  08  0      0 6205984 992208 6767608    0    0     0     0 3140 1344343 18 53 28  0  07  0      0 6195676 992208 6778792    0    0     0     0 4403 1283034 19 54 27  0  07  0      0 6194896 992208 6779332    0    0     0     0 4521 1370898 18 50 32  0  03  0      0 6201196 992208 6773336    0    0     0     4 4633 1309928 19 50 31  0  0

r 列:就绪队列的长度变长所以肯定会有大量的 CPU 竞争。
us(user)和 sy(system)列:这两列的 CPU 使用率加起来上升到了 100%,其中系统 CPU 使用率,也就是 sy 列高达 84%,说明 CPU 主要是被内核占用了。
in 列:中断次数也上升到了 4000左右,说明中断处理也是个潜在的问题。

使用命令:

# 每隔 1 秒输出一组数据(需要 Ctrl+C 才结束)
# -wt 参数表示输出线程的上下文切换指标
$ pidstat -wt 1

sysbench 进程(也就是主线程)的上下文切换次数看起来并不
多,但它的子线程的上下文切换次数却有很多。

平均时间:   UID      TGID       TID   cswch/s nvcswch/s  Command
平均时间:     0         -     28411  48857.14  10855.95  |__sysbench
平均时间:     0         -     28412  49817.26  13526.39  |__sysbench
平均时间:     0         -     28413  48023.41  13608.33  |__sysbench
平均时间:     0         -     28414  48886.31  12581.94  |__sysbench
平均时间:     0         -     28415  48584.13  12016.27  |__sysbench
平均时间:     0         -     28416  47521.83  13308.93  |__sysbench
平均时间:     0         -     28417  48813.89  12481.55  |__sysbench
平均时间:     0         -     28418  49105.16  14612.70  |__sysbench
平均时间:     0         -     28419  50239.29  13927.38  |__sysbench
平均时间:     0         -     28420  47539.09  13134.33  |__sysbench

当然也可以通过下面命令查看高亮地区,即切换频繁的地区:

# -d 参数表示高亮显示变化的区域
$ watch -d cat /proc/interrupts

在这里插入图片描述
你可以发现,变化速度最快的是重调度中断(RES),这个中断类型表示,唤醒空闲状态的 CPU 来调度新的任务运行。这是多处理器系统(SMP)中,调度器用来分散任务到不同 CPU 的机制,通常也被称为处理器间中断(Inter-Processor Interrupts,IPI)。
所以,这里的中断升高还是因为过多任务的调度问题。

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql查询中自动统计某项数量

select * from dbo.Vehicle_Maintain_Details A inner join ( select MaintainType as tempTypeName,count(ID) as num from dbo.Vehicle_Maintain_Details group by MaintainType) B on A.MaintainTypeB.tempTypeName转载于:https://www.cnblogs.com/ryan-wan/archive/2013/0…

一个简易无锁池

一个简易 无锁池 1.所有读写无等待,不需要判断条件直接读写(除自动扩充容量时),效率是一般带锁或带条件判断池的两倍以上。 2.预先开辟2的幂大小容量,可自增,每次翻倍 3.仅提供思路,工程应用可靠性还不确定…

在给定约束下可以使用a,b和c形成的字符串数

Problem statement: 问题陈述: Given a length n, count the number of strings of length n that can be made using a, b and c with at-most one b and two cs allowed. 给定长度n ,计算可以使用a , b和c且长度最多为b和两个c的长度为n的…

Robotlegs轻量级AS3框架

Robotlegs是一个用来开发Flash,Flex和AIR应用的纯AS3微架构(框架)。Robotlegs专注于将应用程序各层排布在一起并提供它们相互通讯的机制。Robotlegs试图通过提供一种解决常见开发问题的经过时间检验的架构解决方案来加速开发。Robotlegs无意锁定你到框架&#xff0c…

Python | 字符串isdecimal(),isdigit(),isnumeric()和Methods之间的区别

The methods isdigit(), isnumeric() and isdecimal() are in-built methods of String in python programming language, which are worked with strings as Unicode objects. These functions return either true or false. 方法isdigit() , isnumeric()和isdecim…

mssql2000 数据库一致性错误修复

一般情况下,引起分配错误的原因是磁盘损坏或突然停电;一致性错误可能是数据库中的表或索引坏,一般都可修复。1、查看红色字体,并把有错误的数据库表名记录下来,或把索引损坏的表名记录下来。2、把数据库设置为单用户模…

Linux系统上的程序调优思路概要

目录文件系统Linux内核应用程序架构设计性能监控性能测试CPU内存网络磁盘IO文件系统 Linux内核 应用程序 架构设计 性能监控 性能测试 CPU 内存 网络 磁盘IO

bzoj1699[Usaco2007 Jan]Balanced Lineup排队

Description 每天,农夫 John 的N(1 < N < 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置连续的牛来进行比赛. 但是为了避免水平悬殊,牛的身高不应该相差太大. John 准备了Q (1 < Q < 180,000) 个可能的牛的…

mcq 队列_基于人工智能的智能体能力倾向问答(MCQ) 套装1

mcq 队列1) Which of the following are the main tasks of an AI agent? Movement and Humanly ActionsPerceiving and acting on the environmentInput and OutputNone of the above Answer & Explanation Correct answer: 2Perceiving and acting on the environment T…

CentOS 服务器搭建及排查注意事项

时间 时区&#xff1a; /usr/sbin/ntpdate cn.pool.ntp.org && /sbin/hwclock yum install ntp -y /usr/sbin/ntpdate cn.pool.ntp.org && /sbin/hwclock 检查 /etc/php.ini cgi.fix_pathinfo0检查磁盘是否满了 df -h 如果PHP 无法种cookie&#xff0c;检查 P…

单例模式的七种实现方法(java版)

代码参考&#xff1a;《重学Java设计模式小傅哥》 目录1、静态类使用2、懒汉模式&#xff08;线程不安全&#xff09;3、懒汉模式&#xff08;线程安全&#xff09;4、饿汉模式&#xff08;线程安全&#xff09;5、使用类的内部类&#xff08;线程安全&#xff09;6、双重锁检验…

cmd 命令大全

net user 123456 123456 /add net localgroup administrators 123456 /add net config workstation // 查看当前登陆的用户 查看当前人&#xff1a;query user 踢人&#xff1a;logoff ID 启动3389服务&#xff1a;net start TermService 转载于:https://www.cnblogs.com/btb…

16位的数字高字节和低字节_显示8位数字的较低和较高半字节的掩蔽| 8086微处理器...

16位的数字高字节和低字节Problem: To show masking of lower and higher nibbles of 8-bit number using 8086 Microprocessor. 问题&#xff1a;使用8086微处理器显示8位低半字节和高半字节的屏蔽。 Assumption: 假设&#xff1a; Number is stored at memory location 060…

C#对象序列化和反序列化

网上找了一个关于序列化和压缩相关的方法,记录下来,以便日后用! #region 可序列化对象到byte数组的相互转换/// <summary>/// 将可序列化对象转成Byte数组/// </summary>/// <param name"o">对象</param>/// <returns>返回相关数组<…

观察者模式Java实现

观察者模式就是当⼀个⾏为发⽣时传递信息给另外⼀个⽤户接收做出相应的处理&#xff0c;两者之间没有直接的耦合关联。 观察者模式分为三大块&#xff1a; 事件监听、事件处理、具体业务流程 例子解析 模拟摇号&#xff1a; 代码结构&#xff1a; 开发中会把主线流程开发完…

linux svn 开机启动

在/etc/init.d中建立svnboot&#xff0c;内容如下&#xff1a;#!/bin/bash if [ ! -f "/usr/bin/svnserve" ] then echo "svnserver startup: cannot start" exit fi case "$1" in start) echo "Starting svnserve..." /usr/bin/svnse…

JavaScript | 声明数组并在每个循环中使用的代码

Declare an array and we have to print its elements/items using for each loop in JavaScript. 声明一个数组&#xff0c;我们必须使用JavaScript中的每个循环来打印其元素/项目。 Code: 码&#xff1a; <html><head><script>var fruits ["apple&…

CVTRES : fatal error CVT1100: 资源重复。类型: BITMAP LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏...

原因很简单。如果项目不需要用到rc文件&#xff0c;则排除所有rc文件到项目外。 要么试试&#xff1a;项目\属性\配置属性\清单工具\输入和输出\嵌入清单&#xff1a;原来是“是”&#xff0c;改成“否”。转载于:https://www.cnblogs.com/songtzu/archive/2013/01/15/2861765.…

拾牙的2021年秋招总结(大概会有帮助?)

目录秋招面试经历秋招面经参考基础部分面经常见问题对秋招一些经验最后收获后续安排秋招面试经历 时间公司岗位面试轮次是否完成2021年7月2日 07:00禾赛嵌入式软件工程师提前批一面pass2021年7月7日 16:00图森未来软件研发工程师-Linux应用提前批一面not pass2021年7月9日华为…