为什么kworker的CPU使用率会变得如此高?

我最近在我的三星笔记本上安装了Ubuntu 12.04,与Windows 7共存。每当我使用Ubuntu时(即使它空闲),kworker使用几乎占据了其中一个8核的90%。尽管这并不真正影响我的使用,但这让我很困扰,我担心它可能会损坏我的处理器。我甚至尝试安装另一个Linux发行版(Linux Mint),结果kworker引起了同样的问题。所以我不知道该怎么办。非常感谢你的帮助。

enter image description here

3个回答

我认为这个CPU使用率并不正常,与众所周知的kworker bug有关: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/887793

对于我和其他很多人来说,解决方法首先是找出导致问题的"gpe",可以通过以下方式进行:

grep . -r /sys/firmware/acpi/interrupts/

检查是否有一个高值(我的是gpe13 - 值为200K - 所以,如果不同的话,你需要相应地更改它)。之后:
~ cp /sys/firmware/acpi/interrupts/gpe13 /pathtobackup
~ crontab -e

每次启动/重启时加入这行代码,以便能够执行它。
@reboot echo "disable" > /sys/firmware/acpi/interrupts/gpe13

保存/退出。然后,在从暂停状态唤醒后使其继续工作:
~ touch /etc/pm/sleep.d/30_disable_gpe13
~ chmod +x /etc/pm/sleep.d/30_disable_gpe13
~ vim /etc/pm/sleep.d/30_disable_gpe13

添加这些内容:

#!/bin/bash
case "$1" in
    thaw|resume)
        echo disable > /sys/firmware/acpi/interrupts/gpe13 2>/dev/null
        ;;
    *)
        ;;
esac
exit $?

保存/退出,完成。

已测试并在以下设备上工作:

Ubuntu 12.10 on Samsung Chronos 7 series - Model no. NP700Z7C --
Ubuntu 16.04.2 on Clevo - Model no. P650RS --

欢迎来到Ask Ubuntu!虽然这样理论上可以回答问题,但更好的做法是在这里包含回答的关键部分,并提供链接作为参考。 - hhlp
谢谢!!!这是我遇到的最烦人的错误,阻止我真正享受在三星手机上使用Ubuntu。 - GClaramunt
为了未来搜索者的利益,babixeddu的解决方案也修复了我在Fedora系统中遇到的问题。我的唯一非零中断文件是grp10,数值范围从7k到15k不等。尽管远远不及babixeddu的200k,但"echo disable"的解决方案对我的系统有效。 - Tom
2太棒了!这在我的笔记本电脑上真的很好用,使用的是Ubuntu 12.04 LTS! - Kevin Dong
3不是设置文件/etc/pm/sleep.d/30_disable_gpe13,而是编辑文件/etc/rc.local,并添加"echo disable > /sys/firmware/acpi/interrupts/gpe13 2>/dev/null"(在exit 0之前),现在它正常工作了,谢谢。 - Joaolvcm
我在我的MacBook Pro上已经遇到了这个问题一年多了,这是我找到的第一个可行的解决方案。谢谢! - ballPointPenguin
1这对我来说也行,适用于14.04.1版本(我的中断计数稍低一些 - 约为40k - 受影响的是gpe16和gpe17)。 - Dan
214.10仍然存在这个问题(MacbookPro Retina,2013年末)。找到gpe06:94815545gpe17:10621,在禁用gpe06之后,kworker不再出现在CPU使用列表的顶部,然后我甚至可以看到电池电量指示器增加了剩余电池使用时间。 - Armando Pérez Marqués
1我购买了富士通Lifebook AH544,并且在Ubuntu 15.10和Ubuntu 14.04上遇到了问题。我的非零中断文件是/sys/firmware/acpi/interrupts/gpe13。这个解决方案对我的系统有效。谢谢! - Yoh
注意:我使用的是三星Chronos 7系列-型号为NP700Z7C,运行15.10版本,这仍然是一个问题。 - oliverseal
2非常感谢您!我一直遇到这个问题。每次打开种子应用程序时,CPU使用率都会从0%飙升到100%。我最初认为这是NTFS的问题,但实际上不是。KTORRENT占用了90%的CPU,但是通过使用您的指南,现在一切都正常了 :-) - Mariano L
1问题在Ubuntu 16.04下仍然存在,我的解决方案仍然有效 ;) - Mauro Mascia
这个问题也影响到了Debian Stretch。3天前,我进行了Debian 8.8的清洁安装,并立即升级到Debian Stretch。从那时起,我一直在网上寻找解决方案。由于我使用了“一个核心高使用率”或“进程高温度”,所以很难通过谷歌搜索到正确的解决方案。我当时感觉,哎呀,我需要重新安装吗?我为配置和自定义付出了那么多时间,难道要白费吗?我还遇到了DisplayLink适配器的问题,愤怒在我心中积蓄到了极限,我想回到旧的Windows 7系统。 - Marecky
还有一件事,我在解决这个问题的开始犯了一个错误,就是使用了新安装的 htop。如果我使用 top,我会看到 kworker 占用了我的 CPU。使用 htop 的问题在于它不会显示当前正在运行的任务中的 kworker - Marecky
注意事项(可能微不足道,但我是个新手)如果单独运行echo "disable" > /sys/firmware/acpi/interrupts/gpe13不能停止kworker进程(可以在另一个终端窗口使用命令top来检查kworker是否停止),那么可能需要以sudo权限运行它。如果这个单独的命令可以正常工作,那么请使用sudo crontab -e来执行剩下的指令,否则无法生效(至少对我来说是这样)。 - jonahe
1同样的问题也存在于戴尔Inspiron 7720上的Ubuntu Budgie 18.04版本。 - Marecky
3这个答案真是救命稻草。看到一个严重的9年老漏洞依然存在,而且显然甚至影响到最新版本的Ubuntu,真是遗憾。 - Gabriel
我在安装了18.10后遇到了这个问题... 我注意到我的电脑亮度存在问题,使用 nomodeset 启动并使用命令行下载专有的 nvidia 驱动程序。重启后,问题得到解决。 - Samleo
12021年,在运行滚动发布发行版的新机器上仍然具有重要意义。 - xendi
这真是太疯狂了,竟然成了一个问题。Pop OS 20.04 - Daniel Tate
有人知道为什么会发生这种情况吗? - Daniel Tate

CPU使用率似乎正常,只有1个CPU(CPU1)的使用率很高。总共有3个进程处于运行状态,其中两个是kworker和gnome-system-mo(您添加的top命令屏幕截图中的前两个进程)。
"kworker"是内核工作线程的占位符进程,它执行内核的大部分实际处理工作,尤其是在存在中断、定时器、I/O等情况下。这些通常对应于分配给运行进程的大部分"系统"时间。它不能以任何方式安全地从系统中删除,并且与nepomuk或KDE完全无关(除了这些程序可能会进行系统调用,可能需要内核执行某些操作)。
有关kworker的更多信息,请参考以下链接:什么是KWorker及其重要性

谢谢您的快速答复!那么我有另一个问题。有没有办法让处理器使用其他CPU而不是仅使用一个核心来执行大部分进程? - Yusuf
我通过从链接安装phc-intel软件包解决了这个问题。 - Yusuf
1当系统处于空闲状态时,核心仍以80%的运行速度进行是绝对不正常的。 - vanadium

我昨天安装了Linux Mint 17,今晚发现kworker占用了4个CPU中的一个100%的资源。我运行了上述检查,但除了中断为0之外,没有发现其他问题。
在检查我通常运行的服务时,我注意到关闭nfs服务器会将kworker线程降至零。重新启动nfs服务器并不能解决这个问题。
我找到了这个错误报告(https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1322407),它表明类似的NFS服务器问题已经在内核3.13.0-32.57中修复。Mint 17的最新更新似乎运行着内核3.13.0-24-generic,所以我正在使用的内核中没有这个修复。我不知道这是否会对其他人有所帮助,但我系统地去每台NFS客户机上执行了'umount -a -t nfs'命令,并等待看是否产生任何效果。我发现在我卸载后,kworker的负载降至零的客户端似乎是导致问题的原因。我重新挂载了客户端上的NFS共享'mount -a -t nfs',问题没有再次出现。