我注意到四核笔记本电脑上的一个核心被固定,并且温度非常高。我在以下位置找到了这个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 键。然后选择引导加载程序列表中列出的旧内核。
这对我来说效果很好。