当前位置: 首页 > article >正文

[Linux性能优化] 线程卡顿优化。Linux加入USB(HID)热插拔线程占用CPU优化。Linux中CPU使用率过高优化

文章目录

  • [Linux性能优化] 线程卡顿优化。
  • 0、省流版本
  • 一、问题定位:CPU 资源分析
  • 二、线程卡顿现场复现
    • 线程优化前图片
  • 三、线程卡顿优化方向
    • 1.如果是轮询方式
    • 2.如果是事件驱动方式
  • 四、修改方式
    • 线程优化后图片

[Linux性能优化] 线程卡顿优化。

0、省流版本

如果采用的是轮询方式,即使用while(1)或者其他死循环的循环结束里面加延时,可以大幅度降低CPU占用率。

一、问题定位:CPU 资源分析

线程卡顿通常与 CPU 资源竞争、线程调度异常相关,第一步需通过系统监控工具定位资源瓶颈。
查看 CPU 使用率及线程状态
可参考这博客篇:
📖Linux 性能分析:TOP 命令深度解析(含 CPU / 线程监控指南)
1. 快速定位工具:top命令基础用法
如需实时查看 CPU 占用情况,可通过以下命令进入监控界面:

top -d 1  # 每秒刷新一次系统状态

按 H 键切换至线程级监控模式(显示所有 LWP 轻量级进程)
按 P 键按 CPU 占用率排序,快速定位高负载线程
(详细操作指南请参考前文链接)

二、线程卡顿现场复现

1. 优化前 CPU 线程分布(示例)

线程优化前图片

热插拔未优化
图注:TOP 线程界面显示某进程下多个线程 CPU 占用率超过 100%,存在资源竞争
图中显示 __check_usb_hot 线程(PID 1062)当前处于运行状态(R),占用 42.5% 的 CPU 资源,该线程属于 /mnt/bin/sctr1 程序,负责 USB 热插拔检测。正常情况下,热插拔检测程序不应长时间占用较高 CPU 资源,此情况可能由以下原因导致:

  • 程序逻辑问题:若检测机制未设置合理休眠时间,可能导致其高频查询 USB 状态,造成 CPU 资源浪费。
  • USB 设备异常:如设备接触不良、硬件故障或驱动问题,可能触发程序持续检测处理,增加 CPU 负担。

建议按以下步骤排查优化:

  • 检查 USB 设备:确认是否有设备异常插拔、接触不良或硬件故障,尝试更换 USB 设备或接口。
  • 审视程序逻辑:查看 __check_usb_hot 线程代码,优化检测频率(如增加检测间隔),避免无意义的高频检测。
  • 监控持续观察:使用 top -d 1 -p 1062 持续监控该线程 CPU 占用情况,结合系统日志分析是否有其他关联异常。
    通过以上排查,可定位具体原因并针对性优化,避免该线程对系统资源的不合理占用。

三、线程卡顿优化方向

1.如果是轮询方式

  • 降低轮询频率:
  • 目前轮询频率可能过高,导致 CPU 占用率较高。可以通过适当增大轮询间隔时间来降低 CPU 使用率。例如,原本每 100 毫秒轮询一次,可以尝试调整为每 500 毫秒或 1 秒轮询一次。
  • 动态调整轮询间隔:根据系统负载或 USB 设备的活动情况,动态调整轮询间隔。例如,在系统负载较高时,适当增大轮询间隔;在检测到有 USB 设备活动后,暂时减小轮询间隔以确保及时捕捉后续事件。
  • 减少不必要的操作:
  • 在每次轮询时,检查是否真的有必要遍历所有的 USB 设备。可以记录上次轮询时的设备列表,仅对新增或移除的设备进行详细处理,避免对未变化的设备进行重复操作。
  • 优化设备状态检查逻辑,避免不必要的系统调用或复杂计算。例如,如果只是检查设备是否存在,可以通过检查设备节点是否存在来快速判断,而不是进行完整的设备信息查询。

2.如果是事件驱动方式

  • 确保事件监听的正确性:
  • 检查事件监听的代码逻辑,确保能够正确捕获所有 USB 热插拔事件。可能存在事件丢失或未正确处理的情况。
  • 确认使用的事件机制是否是最新和最有效的。例如,在较新的 Linux 内核中,可能有更高效的 USB 事件通知方式。
  • 优化事件处理流程:
  • 事件处理函数中可能存在耗时操作,导致后续事件处理延迟。将耗时操作(如设备信息解析、日志记录等)移到单独的线程或异步任务中处理,以确保事件处理的及时性。
  • 对事件处理函数进行性能分析,找出可能的瓶颈并进行优化。例如,减少不必要的函数调用、优化数据结构等。

四、修改方式

static void *__check_usb_hotplug(void *pArgs)
{// .....略while(usb_hotpulg_running_check){// .....略USLEEP(1000*1000);//因为采用的是轮询方式,所以使用加延时。}return NULL;
}

线程优化后图片

热插拔优化后图

相关文章:

[Linux性能优化] 线程卡顿优化。Linux加入USB(HID)热插拔线程占用CPU优化。Linux中CPU使用率过高优化

文章目录 [Linux性能优化] 线程卡顿优化。0、省流版本一、问题定位:CPU 资源分析二、线程卡顿现场复现线程优化前图片 三、线程卡顿优化方向1.如果是轮询方式2.如果是事件驱动方式 四、修改方式线程优化后图片 [Linux性能优化] 线程卡顿优化。 0、省流版本 如果采…...

Ubuntu20.04下如何源码编译Carla,使用UE4源码开跑,踩坑集合

一、简介 作为一个从事算法研究的人员,无人驾驶仿真一直是比较重要的一部分,但是现在比较常见的算法验证都是在carla这个开源仿真平台上做的,所以我有二次开发carla的需求,今天就来讲讲编译CARLA。 网上的教材很多,但还是推荐大家看官网教程:Linux build - CARLA Simul…...

Java中的​​策略模式​​和​​模板方法模式

文章目录 1. 策略模式(Strategy Pattern)案例:支付方式选择 2. 模板方法模式(Template Method Pattern)案例:制作饮料流程 3. 策略模式 vs 模板方法模式4.总结 在Java中,策略模式和模板方法模式…...

26考研——中央处理器_数据通路的功能和基本结构(5)

408答疑 文章目录 三、数据通路的功能和基本结构数据通路的功能数据通路的组成组合逻辑元件(操作元件)时序逻辑元件(状态元件) 数据通路的基本结构CPU 内部单总线方式CPU 内部多总线方式专用数据通路方式 数据通路的操作举例通用寄…...

区块链大纲笔记

中心化出现的原因是由于网络的形成(不然就孤立了,这显然不符合现实,如,社会,计算机网路),接着由于网络中结点能力一般不对等同时为了便于管理等一系列问题,导致中心化网络的出现。&a…...

IntelliJ IDEA 集成AI编程助手全解析:从Copilot到GPT-4o Mini的实践

目录 AI编程助手的演进与核心价值GitHub Copilot深度集成指南国产新星DeepSeek配置实战GPT-4o Mini低成本接入方案三大助手对比与场景适配企业级安全与本地化部署未来发展趋势与开发者启示1. AI编程助手的演进与核心价值 1.1 技术演进图谱 #mermaid-svg-LwYPrW2Y2Pqvqgf0 {fon…...

浏览器自动化:RPA 解决方案的崛起

1. 引言 在 2025 年,浏览器自动化已成为企业和开发者不可或缺的工具。从网页数据抓取到自动化测试,这项技术不仅提高了效率,还推动了 Web 生态的发展。然而,随着浏览器指纹识别和反机器人检测的进步,传统的本地自动化…...

主流编程语言中ORM工具全解析

在不同编程语言中,ORM(Object-Relational Mapping,对象关系映射)工具的设计目标都是简化数据库操作。 以下是主流语言中最常用的 ORM 工具,按语言分类介绍其特点、适用场景和典型案例。 一、Python 生态 Python 社区…...

《数字分身进化论:React Native与Flutter如何打造沉浸式虚拟形象编辑》

React Native,依托JavaScript语言,借助其成熟的React生态系统,开发者能够快速上手,将前端开发的经验巧妙运用到移动应用开发中。它通过JavaScript桥接机制调用原生组件,实现与iOS和Android系统的深度交互,这…...

React学习———React.memo、useMemo和useCallback

React.memo React.memo是React提供的一个高阶组件,用于优化函数组件的性能,它通过记忆组件的渲染结果,避免在父组件重新渲染时,子组件不必要的重新渲染 React.memo会对组件的props进行浅比较,如果props没有变化&#…...

手机换地方ip地址会变化吗?深入解析

在移动互联网时代,我们经常带着手机穿梭于不同地点,无论是出差旅行还是日常通勤。许多用户都好奇:当手机更换使用地点时,IP地址会随之改变吗?本文将深入解析手机IP地址的变化机制,帮助您全面了解这一常见但…...

【Spring Cloud Gateway】Nacos整合遇坑记:503 Service Unavailable

一、场景重现 最近在公司进行微服务架构升级,将原有的 Spring Cloud Hoxton 版本升级到最新的 2021.x 版本,同时使用 Nacos 作为服务注册中心和配置中心。在完成基础框架搭建后,我使用 Spring Cloud Gateway 作为API 网关,通过 N…...

力扣-49.字母异位词分组

题目描述 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String…...

OpenCV光流估计:原理、实现与应用

一、什么是光流&#xff1f; 光流(Optical Flow)是计算机视觉中描述图像序列中像素运动模式的重要概念。它表示图像中物体在连续帧之间的表观运动&#xff0c;是由物体或相机的运动引起的。 光流的基本假设 亮度恒常性&#xff1a;同一物体点在连续帧中的亮度保持不变时间持…...

C语言经典笔试题目分析(持续更新)

1. 描述下面代码中两个static 各自的含义 static void func (void) {static unsigned int i; }static void func(void) 中的 static 作用对象&#xff1a;函数 func。 含义&#xff1a; 限制函数的作用域&#xff08;链接属性&#xff09;&#xff0c;使其仅在当前源文件&…...

AI工具分享篇 | recraft.ai + figma 复刻技术路线图

recraft 介绍 recraft.ai 主要生成和编辑适合网站、印刷和营销的各种风格的矢量艺术、图标、3d图像和插图。其矢量化功能可将路线图转化为一个矢量图。 recraft 的注册流程非常的简单&#xff0c;邮箱注册即可&#xff0c;无需科学上网&#xff0c;3分钟就能搞定。看不懂英文…...

部署安装jenkins.war(2.508)

实验目的&#xff1a;部署jenkins&#xff0c;并与gitlab关联bulid 所需软件&#xff1a;jdk-17_linux-x64_bin.tar.gz jenkins.war apache-tomcat-10.1.40.tar.gz 实验主机&#xff1a;8.10具有java环境,内存最少为4G&#xff0c;cpu双核 目录 jdk安装 …...

JS手写代码篇---手写 Object.create

JS手写代码篇 在做手写题的时候&#xff0c;我们要思考两个问题 这个代码的作用是什么能够实现的效果是什么样子 1. 手写 Object.create 思路&#xff1a;创造一个对象&#xff0c;类似于Object.create()方法>将obj作为原型 // 手写 Object.create function create (ob…...

前端最新面试题及答案 (2025)

前端最新面试题及答案 (2025) JavaScript 核心 1. ES6+ 新特性 问题: 请解释 ES6 中 let/const 与 var 的区别,以及箭头函数的特点。 答案: let/const vs var: 作用域: let/const 是块级作用域,var 是函数作用域 变量提升: var会提升变量,let/const不会(有暂时性死区) 重…...

视频编解码学习十二之Android疑点

一、android.view.SurfaceControl.setDisplaySurface的作用 android.view.SurfaceControl.setDisplaySurface 是 Android 系统中一个 native 层级别的 API&#xff0c;主要用于 设置某个物理显示屏&#xff08;Display&#xff09;的输出 Surface&#xff0c;属于 SurfaceFlin…...

绘制时间对应的数据曲线

头文件#pragma once #include "ChartControl.h" #include <vector> #include "DBOperate.h&...

HTTP 请求中 Content-Type 头部

HTTP 请求中 Content-Type 头部可以设置的各种不同的传输格式。multipart/form-data 只是其中一种,主要用于传输包含文件的数据。 以下是一些常见的 HTTP 请求体的 Content-Type 及其用途: 常见的数据传输格式 (Content-Type) 列表: application/json: 描述: 用于传输 JSO…...

spring boot Controller 和 RestController 的区别

spring boot Controller 和 RestController 的区别 5.3.1常用注解 Spring MVC控制器中常使用的注解有如下几种。 Controller Controller 标记在类上。使用Controller 标记的类表示是Spring MVC的Controller对象。分发处理器将会扫描使用了该注解的类&#xff0c;并检测其中的…...

LeRobot 项目部署运行逻辑(七)—— ACT 在 Mobile ALOHA 训练与部署

全部流程为&#xff1a;硬件配置 -> 环境安装 -> 遥操作数据采集 -> 数据集可视化 -> 策略训练 -> 策略评估 在之前的笔记中已经完成了绝大部分&#xff0c;最后再记录一下最后的训练部署&#xff0c;算是最简单的部分了 目录 1 ACT 训练 2 ALOHA 部署 3 更…...

高频交直流电流测量技术:射频PA与MEMS测试的简单解决方案

随着5G通信和智能传感器技术的快速发展&#xff0c;传统电流测量手段已难以满足现代电子设备的测试需求。最新一代交直流混合测量探头通过突破性的技术创新&#xff0c;正在重新定义射频功率器件和微机电系统的测试标准。 射频功率放大器测试新范式&#xff1a; 在5G基站等高…...

原生微信小程序 textarea组件placeholder无法换行的问题解决办法

【问题描述】 微信小程序原生代码&#xff0c;使用文本域&#xff0c;placeholder使用\n 没有效果&#xff0c;网上找了一堆方案说使用 也没有效果 最后在一个前端大佬博客&#xff0c;找到解决办法&#xff0c;CSS设置word-wrap: break-word; white-space: pre-line; 【解决办…...

网络协议分析 实验二 IP分片与IPv6

文章目录 索引及重要内容实验2 IP 高级实验实验2.1 IPv4协议分片实验实验2.2 IPV6协议实验2.3 ARP初级 索引及重要内容 实验2 IP 高级实验 实验2.1 IPv4协议分片实验 icmp的不可达报文 实验2.2 IPV6协议 实验2.3 ARP初级 arp –a 查看ARP缓存表内容 arp –s IP地址(格式&…...

QT6 源(101)篇一:阅读与注释 QPlainTextEdit,其继承于QAbstractScrollArea,属性学习与测试

&#xff08;1&#xff09; &#xff08;2&#xff09; &#xff08;3&#xff09;属性学习与测试 &#xff1a; &#xff08;4&#xff09; &#xff08;5&#xff09; 谢谢...

【ROS2】编译Qt实现的库,然后链接该库时,报错:/usr/bin/ld: XXX undefined reference to `vtable for

【ROS】郭老二博文之:ROS目录 1、问题描述 在ROS2工程中,编译使用Qt实现的库,在其它ROS2包链接该库时,报错: /usr/bin/ld: XXX undefined reference to `vtable for2、原因分析 查看链接失败的几个函数接口都是,信号函数(signals 标记的函数)。因为信号函数都只有定…...

工业大数据的定义

目录 工业大数据的定义 工业大数据发展历程 工业大数据的特征 工业大数据的处理流程 工业大数据在处理上面临的挑战 工业大数据的有效处理方案 工业大数据处理相关案例 数益工联 x TDengine 中天钢铁 x TDengine 广州某企业工业互联网项目 x TDengine 格创东智 x TD…...