性能测试分析案例-定位内核线程CPU利用率太高

环境准备

预先安装 docker、perf、hping3、curl 等工具,如 apt install docker.io linux-tools-common hping3

操作和分析

Linux 在启动过程中,有三个特殊的进程,也就是 PID 号最小的三个进程。
0 号进程为 idle 进程,这也是系统创建的第一个进程,它在初始化 1 号和 2 号进程后,演变为空闲任务。当 CPU 上没有其他任务执行时,就会运行它。
1 号进程为 init 进程,通常是 systemd 进程,在用户态运行,用来管理其他用户态进程。
2 号进程为 kthreadd 进程,在内核态运行,用来管理内核线程。
要查找内核线程,我们只需要从 2 号进程开始,查找它的子孙进程即可。比如,你可以使用 ps 命令,来查找 kthreadd 的子进程:

ps -f --ppid 2 -p 2
UID        PID  PPID  C STIME TTY          TIME CMD
root         2     0  0 104 ?       00:00:00 [kthreadd]
root         4     2  0 104 ?       00:00:00 [kworker/0:0H]
root         6     2  0 104 ?       00:00:40 [ksoftirqd/0]
root         7     2  0 104 ?       00:00:20 [migration/0]
root         8     2  0 104 ?       00:00:00 [rcu_bh]
root         9     2  0 104 ?       00:02:36 [rcu_sched]
root        10     2  0 104 ?       00:00:00 [lru-add-drain]
root        11     2  0 104 ?       00:00:00 [watchdog/0]
root        12     2  0 104 ?       00:00:00 [watchdog/1]

很多常见的内核线程,我们在性能分析中都经常会碰到,比如下面这几个内核线程。
kswapd0:用于内存回收。在 Swap 变高 案例中,我曾介绍过它的工作原理。
kworker:用于执行内核工作队列,分为绑定 CPU (名称格式为 kworker/CPU:ID)和未绑定 CPU(名称格式为 kworker/uPOOL:ID)两类。
migration:在负载均衡过程中,把进程迁移到 CPU 上。每个 CPU 都有一个 migration 内核线程。
jbd2/sda1-8:jbd 是 Journaling Block Device 的缩写,用来为文件系统提供日志功能,以保证数据的完整性;名称中的 sda1-8,表示磁盘分区名称和设备号。每个使用了 ext4 文件系统的磁盘分区,都会有一个 jbd2 内核线程。
pdflush:用于将内存中的脏页(被修改过,但还未写入磁盘的文件页)写入磁盘(已经在 3.10 中合并入了 kworker 中)。
案例用到两台虚拟机
在这里插入图片描述
在第一个终端,执行下面的命令运行案例,也就是一个最基本的 Nginx 应用:

# 运行Nginx服务并对外开放80端口
docker run -itd --name=nginx -p 80:80 nginx

在第二个终端,使用 curl 访问 Nginx 监听的端口,确认 Nginx 正常启动。假设 192.168.0.30 是 Nginx 所在虚拟机的 IP 地址,运行 curl 命令后,你应该会看到下面这个输出界面:

curl http://xxx.xxx.xxx.xxx/

在这里插入图片描述
还是在第二个终端中,运行 hping3 命令,模拟 Nginx 的客户端请求:

hping3 -S -p 80 -i u1 xxx.xxx.xxx.xxx

执行top命令
在这里插入图片描述
CPU 的软中断使用率都超过了 30%;而 CPU 使用率最高的进程,正好是软中断内核线程 ksoftirqd/0 和 ksoftirqd/1。
已经知道了 ksoftirqd 的基本功能,可以猜测是因为大量网络收发,引起了 CPU 使用率升高;但它到底在执行什么逻辑,我们却并不知道。
那还有没有其他方法,来观察内核线程 ksoftirqd 的行为呢?
perf 可以对指定的进程或者事件进行采样,并且还可以用调用栈的形式,输出整个调用链上的汇总信息。 我们不妨就用 perf ,来试着分析一下进程号为 6 的 ksoftirqd。

$ perf record -a -g -p 9 -- sleep 30

执行 perf report命令,你就可以得到 perf 的汇总报告。按上下方向键以及回车键,展开比例最高的 ksoftirqd
net_rx_action 和 netif_receive_skb,表明这是接收网络包(rx 表示 receive)。
br_handle_frame ,表明网络包经过了网桥(br 表示 bridge)。br_nf_pre_routing ,表明在网桥上执行了 netfilter 的 PREROUTING(nf 表示 netfilter)。而我们已经知道 PREROUTING 主要用来执行 DNAT,所以可以猜测这里有 DNAT 发生。br_pass_frame_up,表明网桥处理后,再交给桥接的其他桥接网卡进一步处理。比如,在新的网卡上接收网络包、执行 netfilter 过滤规则等等。
用火焰图来查看层级太多的调用栈
假设刚才用 perf record 生成的文件路径为 /root/perf.data,执行下面的命令,你就可以直接生成火焰图:

perf script -i /root/perf.data | ./stackcollapse-perf.pl --all |  ./flamegraph.pl > ksoftirqd.svg

在这里插入图片描述
我们就找出了内核线程 ksoftirqd 执行最频繁的函数调用堆栈,而这个堆栈中的各层级函数,就是潜在的性能瓶颈来源。这样,后面想要进一步分析、优化时,也就有了根据。

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

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

相关文章

Windows 项目从0到1的部署

目录 一. 安装jdk 1.1 安装jdk 1.2 配置jdk的环境配置jdk 1.3 配置成功 二. 配置tomcat 2.1 启动tomcat 2.2 防火墙设置 三. 安装MySQL 3.1 安装步骤 3.2 内部连接 3.3 外部连接 四. 部署项目 4.1 项目部署 4.2 修改mysql的用户密码 一. 安装jdk 这里给大家准备好了jdk和…

2024.1.8 Day04_SparkCore_homeWork

目录 1. 简述Spark持久化中缓存和checkpoint检查点的区别 2 . 如何使用缓存和检查点? 3 . 代码题 浏览器Nginx案例 先进行数据清洗,做后续需求用 1、需求一:点击最多的前10个网站域名 2、需求二:用户最喜欢点击的页面排序TOP10 3、需求三&#x…

一卡通水控电控开发踩过的坑

最近在做一个项目,是对接一卡通设备的。我一开始只拿到设备和3个文档开局。不知道从哪下手。一步一步踩坑过来。踩了很多没有必要的坑,写出来给有用的人吧。 读卡器怎么用? 有个读卡器,一开始什么软件也不提供。我都不知道是干嘛…

Jupyter Notebook

2017年左右在大学里都听说过Jupyter Notebook,并且也安装用了一段时间,后来不知道什么原因没有用了。估计是那时候写代码的时候多一些,因为它可以直接写代码并运行结果,现在不怎么写代码了。 介绍 后缀名为.ipynb的json格式文件…

《YOLO算法:基础+进阶+改进》报错解决 专栏答疑

前言:Hello大家好,我是小哥谈。《YOLO算法:基础进阶改进》专栏上线后,部分同学在学习过程中提出了一些问题,笔者相信这些问题其他同学也有可能遇到。为了让大家可以更好地学习本专栏内容,笔者特意推出了该篇…

SpringBoot集成Camunda

一&#xff1a;SpringBoot集成 1.1&#xff1a;pom.xml 因camunda集成SpringBoot对SpringBoot的版本和JDK的版本都有一定的要求&#xff0c;所以这里贴个完整的依赖。可以去官网找每个SpringBoot的版本对应的camunda版本。 <?xml version"1.0" encoding"…

前端入门教程:学完即可单独完成前端项目

目录 目录 1.HTML: 1.1概念 1.2结构 1.3常见的标签使用分类&#xff1a; 2.CSS: 2.1概念 2.2样式实践&#xff1a; 以下的举例都来自于博客&#xff1a; 2.3css选择器&#xff1a; 什么是css选择器&#xff1a; 举例如下&#xff1a; 2.4Demo 3.JavaScript&#…

算法34:贴纸拼词(力扣691题)

题目&#xff1a; 我们有 n 种不同的贴纸。每个贴纸上都有一个小写的英文单词。 您想要拼写出给定的字符串 target &#xff0c;方法是从收集的贴纸中切割单个字母并重新排列它们。如果你愿意&#xff0c;你可以多次使用每个贴纸&#xff0c;每个贴纸的数量是无限的。 返回你…

vivado IP Revision Control

2020.2 只需要git 管理 prj.xpr 和 prj.srcs/ https://china.xilinx.com/video/hardware/ip-revision-control.html https://www.xilinx.com/video/hardware/vivado-design-suite-revision-control.html

每日一题:LeetCode-LCR 007. 三数之和

每日一题系列&#xff08;day 18&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

linux高级篇基础理论十一(GlusterFS)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️不能因为人生的道路坎坷,就使自己的身躯变得弯曲;不能因为生活的历程漫长,就使求索的 脚步迟缓。 ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xff1a;云计算技…

VS中动态库的创建和调用

VS中动态库的创建和调用 库 ​ 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复用的代码。库的存在形式本质上来说库是一种可执行代码的二进制。 ​ 库有两种&#xff1a;静态库&#xff08;.a、.lib&#xff09;和动态库&#xff08;.so、.dll&#xff09;。所谓静态…

一键操作完整的部署项目流程

目录 一、常见的搭配 二、完整的部署项目流程具体步骤 2.1、安装jdk 安装jdk &#xff1a; 配置环境&#xff1a; 检查是否成功&#xff1a; 2.2、配置tomcat外部访问 下载解压软件 安装tomcat 测试tomcat安装是否成功 2.3、安装MySQL 安装vcc环境 命令输入步骤 安…

应用在热能表领域中的数字温度传感芯片

热能表&#xff0c;是适用于测量在热交换环路中&#xff0c;被称作载热液体的液体所吸收或转换热能的仪器&#xff0c;它由流量传感器、温度传感器和热能积算仪三部分组成。热量表&#xff08;热表&#xff09;又称热能表、热能积算仪&#xff0c;既能测量供热系统的供热量又能…

多模态推荐系统综述:二、特征交互 Fusion

二、Fusion 融合不同的多模态信息&#xff0c;与bridge相比&#xff0c;融合更关注项目之间的多模态内部关系。 它可以灵活地融合不同权重和焦点的多模态信息。 注意机制是应用最为广泛的特征融合。 2.1 粗粒度注意力。 一些模型应用注意力机制在粗粒度级别融合来自多种模式…

K8S集群重新初始化--详细过程

K8S集群重新初始化 0、当前环境1、master节点1.1、在master节点执行下面reset命令&#xff1a;1.2、手动清除配置信息&#xff0c;这一步很关键&#xff1a;1.3、重新引导集群1.4、创建配置目录&#xff0c;并复制权限配置文件到用户目录下&#xff1a;1.5 查看集群状态1.6 安装…

小红书私信组件功能解读,商家如何使用

今年八月&#xff0c;小红书私信组件上新了两大新功能。新功能的出现&#xff0c;无疑为商家与消费者的沟通建联&#xff0c;提供了新的可能。今天我们来针对小红书私信组件功能解读&#xff01; 一、小红书私信组件新功能 这次小红书私信组件上新的两大功能分别是&#xff0c;…

GEE查看SMAP的L3级土壤水分产品并导出为TIFF

SMAP的L3级产品&#xff0c;时间分辨率为每日&#xff0c;空间分辨率为9KM&#xff0c;到2023年12月2日停止提供。 查看逐日的土壤水分变化 // 设置感兴趣区域&#xff08;Region of Interest&#xff09; var roi ee.FeatureCollection(projects/a-flyllf0313/assets/dacha…

【Spring Cloud】微服务架构演变及微服务架构介绍

文章目录 系统架构演变单体应用架构垂直应用架构分布式架构SOA 架构微服务架构 微服务架构介绍微服务架构的常见问题微服务架构的常见概念服务治理服务调用服务网关服务容错链路追踪 微服务架构的常见解决方案ServiceCombSpringCloudSpring Cloud Alibaba 总结 欢迎来到阿Q社区…

探索web技术与低代码开发的融合应用

随着物联网、云计算和人工智能等技术的迅猛发展&#xff0c;现代软件开发正面临着日益增长的需求和复杂性。为了应对这一挑战&#xff0c;一种被称为低代码开发的快速、可视化开发方法逐渐崭露头角。本文将探讨低代码开发与web技术的融合应用&#xff0c;以及这种趋势对软件开发…