当前位置: 首页>>技术教程>>正文


Kworker,它是什么,为什么它占用CPU太多?

,

问题描述

我最近升级到了Kubuntu Natty Beta 1,并且在处理kworker时遇到了很多问题。有时候它几乎占用我一半的CPU。另外,奇怪的是它似乎影响我的USB端口;无论何时插入USB驱动器,kworker进程都会进入超级驱动器,从而无法工作。

我曾考虑过提交一个bug,但由于我甚至没有找到任何合理的解释,我认为我应该首先找出哪些kworker。

最佳解决方法

“kworker”是内核工作线程的占位符进程,它执行内核的大部分实际处理,特别是在有中断,定时器,I /O等的情况下。这些线程通常对应于绝大多数分配的”system”时间运行的进程。它不能以任何方式安全地从系统中删除,并且与nepomuk或KDE完全无关(除了这些程序可能会进行系统调用,这可能需要内核执行某些操作)。

有一些报告显示,从2.6.36开发(example discussion)开始,对于相对闲置的系统kworker活动过度,2.6.38(尽管其中许多报告包含”Natty”这个词,但我认为这些人不是这些人使用2.6.35(分布在Ubuntu 10.10)和2.6.38(分布在Ubuntu 11.04)之间的任何内核。

我发现了很多关于”fixed”用于某个用户的报告。大多数”fixes”似乎与各种内核的更新有关。在可以跟踪某个特定问题的更新的情况下,它似乎经常是一些驱动程序或内核服务已修补为不行为:我认为内核中可能导致行为的内容有很多这被认为是kworker的过度使用。

如果由于kworker活动过多而发现系统无法使用,我会建议尽量少做些事情。如果您认为自己没有做任何事情,请尝试关闭long-running服务或定时器(RSS阅读器,邮件阅读器,文件索引器,活动跟踪器等)。如果这不起作用,请尝试重新启动。如果您的系统允许您在pre-boot环境中启用或禁用硬件,请尝试关闭您未使用的硬件。如果在你做任何事情之前每次重启都会发生这种情况,你可以尝试卸载,但是现在你需要运行系统调用分析工具来追踪那些似乎导致这种过载的特定应用程序。

希望你的特定系统能够在未来的内核升级时停止表达这种行为(并且已经解决了许多最常见的原因)。

次佳解决方法

什么是kworker? kworker表示执行”work”(处理系统调用)的Linux内核进程。你可以在你的进程列表中有几个:kworker/0:1是你的第一个CPU核心,kworker/1:1是第二个等。

为什么kworker会占用你的CPU?要找出kworker浪费CPU的原因,可以创建CPU回溯:通过kworker监视处理器负载(使用top或其他)并在高负载时执行echo l > /proc/sysrq-trigger创建回溯。 (在Ubuntu上,这需要您使用sudo -s登录)。多次执行此操作,然后在dmesg输出结束时观察回溯。看看CPU回溯中经常发生什么,它有希望指出你的问题来源。

例如:e1000e。就我而言,我几乎每次都会发现这样的回溯:

Call Trace:
 delay_tsc+0x4a/0x80
 __const_udelay+0x2c/0x30
 e1000_acquire_swflag_ich8lan+0xa2/0x240 [e1000e]
 e1000e_read_phy_reg_igp+0x29/0x80 [e1000e]
 e1000e_phy_has_link_generic+0x85/0x120 [e1000e]
 e1000_check_for_copper_link_ich8lan+0x48/0x930 [e1000e]
 e1000e_has_link+0x55/0xd0 [e1000e]
 e1000_watchdog_task+0x5e/0x960 [e1000e]

它暗示我在e1000e以太网卡模块中存在问题,并且实际上sudo rmmod e1000e会立即消除高CPU负载[e1000e bug #26]。

第三种解决方法

为什么kworker会占用CPU(续)?作为my other answer here的替代方案,Perf是分析内核任务占用CPU的更专业的方法:

  1. 安装perf

    sudo apt-get install linux-tools-common linux-tools-3.11.0-15-generic
    

    (第二个软件包必须与你的内核版本相匹配,你可以先安装linux-tools-common并调用perf来告诉你它需要哪个软件包。)

  2. 在你所有的CPU上记录10秒钟的回溯:

    sudo perf record -g -a sleep 10
    
  3. 分析你的录音:

    sudo perf report
    

    (使用Enter浏览调用图。)

第四种方法

只是为了让大家知道。我遇到了这个问题,安装了perf(这是一个很棒的工具),它指向了自旋锁定和XFS。这指向NFS。然后我意识到我的一个坐骑没有空间。释放空间导致kworker CPU降至0。

所以显然这可能是在繁忙的NFS服务器上耗尽硬盘空间的一个症状!

第五种方法

我最近在外置驱动器usb wd护照上安装了Ubuntu Natty。当我在大约两岁的桌面上开始时,一切都像魅力一样。当我在我的新笔记本电脑(MSI gt680r系统)上启动时,在我将计算机从睡眠状态唤醒或者插入另一个USB磁盘后,速度变慢。

Kworker进程占用越来越多的CPU,并且鼠标不时冻结。

我在各种论坛上阅读过几个解决方案,但都无效。

我进入我的笔记本电脑的BIOS,那里有:

Hand XCHI OFF: Enabled
EHCI Hand OFF: disabled

我改变了:

Hand XCHI OFF: disabled
EHCI Hand OFF: disabled

从那以后,它不会在我的笔记本电脑上冻结。

如果问题得到纠正,我会回复。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/560.html,未经允许,请勿转载。