为什么 systemd-udev 会占用我的 CPU?

为什么 systemd-udev 会占用我的 CPU?

我注意到四核笔记本电脑上的一个核心被固定,并且温度非常高。我在以下位置找到了这个top

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  359 root      20   0  188684 147228   1552 R  99.4  5.0 111:19.91 systemd-udevd
20011 root      20   0  188320 147604   2076 S  11.0  5.0   0:00.33 systemd-udevd
11053 dotanco+  20   0 3030036 918672  49608 S   9.6 31.2 280:40.65 firefox
 3468 dotanco+  20   0 3612776 136740  43484 S   1.7  4.6  57:02.52 plasma-desktop
20006 root      20   0       0      0      0 Z   1.0  0.0   0:00.37 systemd-udevd

为什么会systemd-udev锤击CPU?这是 Kubuntu 14.10 系统:

$ uname -a
Linux loathe 3.16.0-44-generic #59-Ubuntu SMP Tue Jul 7 02:07:39 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/issue
Ubuntu 14.10 \n \l

编辑:我注意到除了固定的CPU 之外,还有一个额外的问题。新连接的 USB 设备(例如 USB 大容量存储设备或键盘)将显示,lsusb但无法使用。大容量存储设备未自动安装,USB 键盘无法使用。我没有尝试过手动安装 USB 驱动器。

根据布拉奇利的建议,这是 straceID 为 359的进程systemd-udev

答案1

看起来 libmtp 找到了一个设备,但它无法正确断开它的连接,并且它正在不断地检查它。它发生在某些设备上,可以通过编辑禁用/lib/udev/rules.d/69-libmtp.rules

查找如下几行(在文件末尾):

# Autoprobe vendor-specific, communication and PTP devices 
ENV{ID_MTP_DEVICE}!="1", ENV{MTP_NO_PROBE}!="1", ENV{COLOR_MEASUREMENT_DEVICE}!="1", ENV{libsane_matched}!="yes", ATTR{bDeviceCl     ass}=="00|02|06|ef|ff", PROGRAM="/usr/lib/udev/mtp-probe /sys$env{DEVPATH} $attr{busnum} $attr{devnum}", RESULT=="1", SYMLINK+="li     bmtp-%k", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"

通过在 ENV 之前添加 # 来注释第二行,使其看起来像:

#ENV{ID_MTP.... 

重新启动计算机或运行sudo systemctl restart systemd-udevd并享受免费的 CPU 周期:)

答案2

用于udevadm monitor找出哪个驱动程序正在共享 CPU。

答案3

eLobato 提出的解决方案对我不起作用。

与描述的相同症状,我发现了这个线程: https://askubuntu.com/questions/1073185/after-upgrade-from-ubuntu-16-to-18-04-systemd-udevd-uses-100-cpu

这为我解决了这个问题。为了完整性,我重复下面的解决方案,但所有积分都归于 brunom4ciel 的原始答案。


尝试停止和启动进程是否可以解决问题并且没有不良副作用:

sudo systemctl stop systemd-udevd systemd-udevd-kernel.socket systemd-udevd-control.socket

sleep 5

sudo systemctl start systemd-udevd systemd-udevd-kernel.socket systemd-udevd-control.socket

如果这有效,请将其嵌入到以下脚本中/etc/init.d/systemd-udevd-solv.sh

sudo vim /etc/init.d/systemd-udevd-solv.sh

并粘贴:

#!/bin/sh

sudo systemctl stop systemd-udevd systemd-udevd-kernel.socket systemd-udevd-control.socket

sleep 5

sudo systemctl start systemd-udevd systemd-udevd-kernel.socket systemd-udevd-control.socket

然后更改登录时执行的权限

sudo chmod a+x /etc/init.d/systemd-udevd-solv.sh

答案4

内核中有一个错误导致 systemd-udevs 100% CPU 使用率。

因此,解决方法是重新启动系统,在加载 Grub 期间按住 Shift 键。然后选择引导加载程序列表中列出的旧内核。

这对我来说效果很好。

相关内容