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


136

我最近升级到了Kubuntu Natty Beta 1,并且在处理kworker时遇到了很多问题。有时候,它几乎消耗了我一半的CPU。另外,奇怪的是它似乎影响了我的USB端口。每当我插入USB驱动器时,进程kworker就会进入超级驱动器,这使我无法工作。

我曾经考虑过要提交一个错误,但是由于我什至没有找到关于什么是kworker的合理解释,所以我认为我应该先找出答案


奇怪的是,kworker正在运行,并且对唤醒起了10%的作用,但是我没有安装Kubuntu程序。未安装Alos Nepomuk。
dago

1
从afrazier的响应中,我现在认为它与内核有关(因此kworker中的k是内核)。所以这就是为什么您还要在Ubuntu机器上运行kworker的原因。
davorao 2011年

1
这个答案也可能有助于找出kworker在做什么:unix.stackexchange.com/questions/22851/…–
anarcat

1
您不应该进行最后一次操作系统更新。如果幸运的话,下一个会修复它。
nobar

Answers:


109

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

有报告称从2.6.36开发开始,相对闲置的系统就出现了过多的kworker活动(示例讨论),还有关于2.6.38的混乱和问题的广泛报道(尽管其中许多报告都包含“ Natty”一词,所以我认为这些人没有使用过2.6.35(在Ubuntu 10.10中分发)和2.6.38(在Ubuntu 11.04中分发)之间的任何内核。

我发现许多关于某人或另一位用户“修复”此问题的报告。大多数“修复”似乎与各种内核更新有关。可以将更新跟踪到某个特定问题的地方,似乎通常是某些驱动程序或内核服务已被修补为不会出现异常行为:我的印象是,内核中有很多东西可以导致行为这被视为过度使用kworker。

如果您发现由于kworker活动过多而导致系统无法使用,我建议您尝试减少操作。如果您认为自己什么都没做,请尝试关闭长期运行的服务或计时器(RSS阅读器,邮件阅读器,文件索引器,活动跟踪器等)。如果这不起作用,请尝试重新启动。如果您的系统允许您在预引导环境中启用或禁用硬件,请尝试关闭不使用的硬件。如果在每次重新启动之前发生这种情况,那么您可以尝试卸载东西,但是在这一点上,您将需要运行syscall分析工具来跟踪可能导致此过载的特定应用程序。

希望您的特定系统在将来的内核升级中不再表现这种行为(并且已经解决了许多最常见的原因)。


1
我有一个缓慢的登录问题,我认为与此有关;我设法通过延迟所有以此方式启动的方法来解决此问题:askubuntu.com/a/484856/46437
Aquarius Power

1
也许这是多余的,但对明确表达的回应表示敬意。先生,这是一些表达精良的英语。
乔恩·卡特

81

什么是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回溯中经常发生的情况,希望它可以指出问题的根源。

示例: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错误#26 ]。


4
echo l > /proc/sysrq-trigger似乎对proxmox不好用sysrq: SysRq : This sysrq operation is disabled.
hak8或

1
sysrq的需要用sysctl -w kernel.sysrq = 1重新启用看到askubuntu.com/questions/911522/...
的Sebastien

您如何理解e1000是引起此问题的原因?仅仅是因为它被重复?
onurcanbektas

@onurcanbektas是–重复频率最高的结果是最可能的原因。因为回溯是现场检查,所以需要检查CPU占用的带宽。
tanius

70

为什么kworker占用CPU(续)?作为我这里其他答案的替代方法,Perf是一种更专业的方法来分析哪些内核任务正在占用您的CPU:

  1. 安装perf

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

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

  2. 记录所有CPU上大约10秒的回溯记录:

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

    sudo perf report
    

    (导航调用图与Enter。)


2
在我的系统上,使用VMware虚拟机运行在VMware虚拟机中,perf将问题归结为sd_mod内核模块。在vmx文件中禁用SCSI将阻止模块加载并使系统恢复正常速度:scsi0.present = "FALSE"
feklee 2015年

E:无法找到linux-tools-3.11.0-15-generic软件包E:找不到glob'linux-tools-3.11.0-15-generic'的软件包E:regex找不到任何软件包“Linux的工具- 3.11.0-15泛型”
水稻

@Paddy:请再次检查答案:-)“ [linux-tools-*-generic]软件包必须与您的内核版本匹配。您可以首先仅安装linux-tools-common并调用perf使其告诉您哪个软件包需求。”
tanius

8

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

因此,显然这可能是繁忙的NFS服务器上驱动器空间用尽的症状!


1
我注意到当运行特定的virtualbox时,kworker崩溃了。原来有人正在与我的主机一起运行NFS以共享文件。但是还远远不够。卸载NFS可解决此问题。我想我将与sshfs挂载共享。
Programster

4

我最近在外置USB USB护照上安装了Ubuntu Natty。当我从大约有两年历史的台式机开始工作时,所有东西都像魅力一样。当我在新笔记本电脑(MSI gt680r系统)上启动时,从睡眠状态唤醒计算机或插入其他USB磁盘后,它的速度会降低。

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

我在各种无效的论坛上阅读了几种解决方案。

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

Hand XCHI OFF: Enabled
EHCI Hand OFF: disabled

我更改为:

Hand XCHI OFF: disabled
EHCI Hand OFF: disabled

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

如果问题何时得到纠正,我将启用退回功能。


1
谁能解释为什么会这样?XCHI如何连接?
GuySoft '17

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.