为什么 systemd-udev 盯住我的 CPU?

dot*_*hen 16 systemd cpu-usage

我注意到四核笔记本电脑上的一个核心是固定的,并且温度非常高。我在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
Run Code Online (Sandbox Code Playgroud)

为什么可能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
Run Code Online (Sandbox Code Playgroud)

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

根据 Bratchley 的建议,这里是systemd-udevID 为 359的进程的跟踪。

小智 19

看起来 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"
Run Code Online (Sandbox Code Playgroud)

通过在 ENV 前放置 # 来注释第二行,使其看起来像:

#ENV{ID_MTP.... 
Run Code Online (Sandbox Code Playgroud)

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


小智 11

使用udevadm monitor找出哪个驱动程序是汇集CPU。

  • 好的。我想我找到了这个设备。现在怎么办? (2认同)

SeF*_*SeF 7

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
Run Code Online (Sandbox Code Playgroud)

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

sudo vim /etc/init.d/systemd-udevd-solv.sh
Run Code Online (Sandbox Code Playgroud)

并粘贴:

#!/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

Run Code Online (Sandbox Code Playgroud)

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

sudo chmod a+x /etc/init.d/systemd-udevd-solv.sh
Run Code Online (Sandbox Code Playgroud)


小智 6

另一个原因:

  1. 安装nvidia驱动396
  2. 以空白屏幕重新启动
  3. 在bios中禁用nvidia
  4. 系统与英特尔合作,但经过几次睡眠/恢复后,我从udevadm monitor(随机行,但无限期地重复所有相同的内容):

    ...
    KERNEL[10072.040174] remove   /module/nvidia (module)
    UDEV  [10072.062670] add      /module/nvidia (module)
    UDEV  [10072.063617] add      /kernel/slab/:A-0000256/cgroup/filp(40652:nvidia-persistenced.service) (cgroup)
    UDEV  [10072.076901] remove   /module/nvidia (module)
    UDEV  [10072.109365] add      /kernel/slab/:aA-0000192/cgroup/dentry(40652:nvidia-persistenced.service) (cgroup)
    KERNEL[10072.138225] add      /module/nvidia (module)
    KERNEL[10072.139241] add      /kernel/slab/:0012288 (slab)
    KERNEL[10072.139651] remove   /kernel/slab/:0012288 (slab)
    ...
    
    Run Code Online (Sandbox Code Playgroud)

我不确定,但我希望这是由于 nvidia 驱动程序处于活动状态但 nvidia 在 BIOS 中被禁用。

  • 我遇到了同样的问题。卸载Nvidia驱动程序解决了这个问题。 (2认同)