Linux的idle进程占CPU,Linux kworker 占用CPU过高

本文解释了Linux系统中kworker进程的功能及其可能占用大量CPU资源的原因。通过创建CPU回溯来定位问题,并提供了具体的排查步骤及工具使用方法。

先打开HTOP

htop

然后按H K(大写)

e222172179d0262fe38cc52016638d12.png

我们看到Kworker/0:0+events占用了大量CPU,下面参考下人家的回答

什么是kworker? kworker表示进行“工作”(处理系统调用)的Linux内核进程。在进程列表中可以有多个:kworker/0:1在第一个CPU内核上kworker/1:1是一个,在第二个CPU内核上是一个,依此类推。

为什么kworker占用您的CPU?要找出kworker浪费您CPU的原因,您可以创建CPU回溯:观察您的处理器负载(有top或没有),并在高负载kworker时执行,echo l > /proc/sysrq-trigger以创建回溯。(在Ubuntu上,这需要您使用登录sudo -s)。这样做几次,然后在dmesg输出结束时观察回溯。查看CPU回溯中经常发生的情况,希望它可以指出问题的根源。

安装perf

sudo dnf install perf.aarch64 #我用的华为云鲲鹏arm的,自行修改

记录所有CPU上10S回溯记录

sudo perf record -g -a sleep 10

然后会在当前目录下生成一个perf.data

用以下命令查看

sudo perf report

5aec23b175a4d4f8e0226d2ad4834685.png

我们看到arch_cpu_idle占用大量CPU。于是问了Fedora telegram群里的,翻了下arch/arm64/kernel/process.c

结论居然根本没有其他进程在使用CPU,Linux会自动保存CPU运作。(以后我会把博客转到自己的网站上zhyz.ru)

doesn't this mean that simply no other process is using the CPU? from what I see, this is like the "Idle task" in Windows

补充:不知道是不是BUG现在2个线程都满了。

参考:https://askubuntu.com/questions/33640/kworker-what-is-it-and-why-is-it-hogging-so-much-cpu

### Linux 中与 IDLE 相关的概念 在讨论 Linux 的上下文中,“IDLE”通常不作为一个特定命令存在,而是更多地关联到 Python 编程语言中的集成开发环境 (IDE),即 **Idle**。然而,在 Linux 系统管理方面,有几种方式可以监控系统的空闲状态。 #### 使用 `top` 或者 `htop` 来监测 CPU进程活动 这些工具提供了实时视图来观察哪些进程正在消耗资源以及整体CPU利用率。当提到系统处于“idle”,实际上是指大部分时间里处理器没有被任何任务占用的情况。通过运行 `top` 命令可以看到类似下面的信息: ```bash top - 14:38:09 up 2 days, 3:47, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 226 total, 1 running, 225 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 15952.4 total, 4524.6 free, 2345.7 used, 9082.1 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 12774.0 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1234 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/0:1H-kblockd ``` 在这个例子中,`%Cpu(s)` 行展示了当前 CPU 时间分配给不同类型的处理请求的比例。“id”代表的是闲置百分比[^1]。 #### 利用 `vmstat`, `mpstat` 或其他性能统计工具获取更详细的 idle 数据 对于更加深入的分析,可以采用专门设计用来收集操作系统统计数据的应用程序。例如,`vmstat` 可以提供关于内存、交换空间、I/O 和 CPU 活动的数据;而 `mpstat` 能够报告多核或多线程架构下的每颗核心的表现情况。 执行简单的 `vmstat` 查询可能会返回如下输出: ```bash 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 4524744 234572 9082128 0 0 0 0 0 0 0 0 100 0 0 ``` 这里最后一列 “id” 同样表示了 CPU 处于空闲状态的时间比例[^2]。 #### 自定义脚本来检测长时间无操作的状态 有时可能希望编写一个小脚本来自定义判断标准,比如基于键盘鼠标输入或者其他事件触发条件来决定计算机是否进入了所谓的“idle”。这可以通过监听 X Window System 上发生的动作实现,或者利用桌面环境中提供的 API 接口。 ```bash #!/bin/bash last_input_time=$(xprintidle) if (( last_input_time > 6000 )); then echo "System has been idle for more than 6 seconds." fi ``` 此 Bash 脚本片段使用了一个名为 `xprintidle` 的外部实用程序(需单独安装),它会给出自上次用户交互以来经过了多少毫秒数。如果超过了设定阈值,则认为系统已经进入空闲模式并打印相应消息[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值