1.简介
“kworker” 是 Linux 内核的工作线程,用于异步处理工作队列中的任务。这些任务包括处理硬件中断、文件系统事件、管理系统内存等。你可能会看到多个 kworker 进程,每个进程的名称后面都有一个数字,如 “kworker/0:1”、“kworker/1:2” 等。这个数字表示了 kworker 是在哪个 CPU 核心上运行的以及任务的顺序。kworker是3.x内核引入的,用来执行工作队列中的work,一般由kthreadd建立。
2.占用CPU高
正常情况下,kworker 进程的 CPU 占用率应该是相对较低的。但是,在一些情况下,你可能会发现 kworker 进程占用了大量的 CPU。这可能是因为系统中有大量的底层任务需要处理,这些任务可能包括硬件中断、文件系统操作、内存管理等。
要找出kworker浪费您CPU的原因,可以创建CPU回溯:观察您的处理器负载(有top或没有),并在高负载kworker时执行,echo l > /proc/sysrq-trigger以创建回溯。(在Ubuntu上,这需要您使用登录sudo -s)。这样做几次,然后在dmesg输出结束时观察回溯。查看CPU回溯中经常发生的情况,希望它可以指出问题的根源。可能的原因包括:
- 硬件问题: 有时,某些硬件设备会产生大量的中断,导致 kworker 线程的 CPU 占用率提高。这可能是硬件故障或者驱动程序错误导致的。
- I/O 等待: 如果系统中有大量的磁盘 I/O 操作,kworker 线程可能会被频繁唤醒来处理这些操作,从而导致高 CPU 占用。
- 内存压力: 如果系统内存使用率高,可能会导致频繁的内存回收操作,这也会导致 kworker 线程的 CPU 占用率提高。
3.诊断工具
需要找出是什么导致 kworker 高 CPU 占用。可以使用一些系统诊断工具,如 perf、iostat、vmstat 等,来找出问题的根源。根据问题的具体原因,我们可以采取相应的措施来解决问题。
#记录所有CPU上10S回溯记录
sudo perf record -g -a sleep 10
sudo perf report
4.更多文章
==============================
新的文章内容和分享已更新在:
|工|·-·|重|·-·|号|:协议森林
==============================