kworker 把 CPU 吃满了怎么办:内核线程高占用的排查思路

问题:top 里看不到哪个应用占 CPU 高,但整体 CPU 使用率却居高不下,仔细看有一堆名为 kworker/0:1、kworker/1:2 之类的线程吃了不少——这是内核线程在忙,不是哪个应用程序的问题。

原因:kworker 是 Linux 内核的工作线程,内核把延迟工作(中断处理的后半段、定时器、磁盘与网络 I/O 的底层处理等)交给它们执行。kworker 占用高,实际含义是"内核在替某些硬件或驱动干活":常见的幕后推手包括高频网络中断与软中断、磁盘 I/O 风暴、有问题的驱动固件、或电源管理相关的频繁唤醒。

分步解决:

  1. 看分布:top 里按 1 展开各核,观察 kworker 是集中在单核还是均匀分布;mpstat -P ALL 1 看 %soft(软中断)是否异常高——集中在网络相关软中断的,怀疑网络流量或网卡中断配置。
  2. 看 I/O:iostat -x 1 检查磁盘利用率与 await,磁盘忙爆时 kworker 的 I/O 线程自然高;配合 iotop 找出制造 I/O 的进程。
  3. 定位具体内核活动:perf top 能看到内核里正在执行的热点函数,网络收包、文件系统日志、定时器一目了然;需要更细的可用 echo w > /proc/sysrq-trigger 配合 dmesg 查看工作队列内容。
  4. 对症处理:网络软中断高的调网卡多队列与中断亲和性,或检查是否存在异常流量;磁盘 I/O 高的治理制造 I/O 的应用(日志刷写、频繁小 I/O 的服务);驱动问题的查内核版本已知问题并升级。
  5. 时间规律辅助:占用高峰与备份任务、日志切割、监控轮询等定时动作对得上的,先把定时任务错峰再观察。

预防:内核线程高占用多数是"果",把应用层的 I/O 与流量治理好,kworker 自然安静;系统升级与驱动更新纳入例行维护;建立 CPU 使用的基线监控,偏离基线的异常早发现早定位。

小结:kworker 高不是敌人,是内核在替谁干活的提示——perf 和 iostat 就是翻译官,把幕后主使找出来治理,比对着内核线程本身做任何操作都有效。

Linux 性能排障是贵州诚鑫致达科技服务器运维服务的常规项目,遇到类似的疑难问题欢迎通过官网联系我们。

企业存储选型参考|贵州诚鑫致达

做备份容灾一体机方案,群晖机型参考:DP7400 · DP520 · DP320。需要选型建议或上门评估,搜「诚鑫致达」即可找到我们。

服务区域|贵州诚鑫致达

贵州群晖NAS、贵阳存储、数据备份、信创云盘或 IT 集成服务,可联系贵州诚鑫致达科技,服务范围覆盖贵州全省各市州。西南地区多分支企业:跨区域数据集中存储与统一备份。