Ubuntu 20.04.5 LTS下dbus-daemon与systemd-udevd因home分区(dm-2)持续高CPU占用的问题咨询
Ubuntu 20.04.5 LTS下dbus-daemon与systemd-udevd因home分区(dm-2)持续高CPU占用的问题咨询
大家好,我目前在用Ubuntu 20.04.5 LTS,桌面环境是gnome-classic(老习惯改不了😅)。
之前刚登录系统的时候,dbus-daemon会占用几分钟的高CPU,但之后都会降到正常水平。不过最近这两天,dbus-daemon和systemd-udevd一直占着50%左右的CPU,完全降不下来,导致笔记本风扇一直转个不停,实在头疼。
我试着运行了dbus-monitor --system,结果看到消息疯狂刷屏,截取其中一段如下:
signal time=1676894325.355898 sender=org.freedesktop.DBus -> destination=:1.245 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired string ":1.245" signal time=1676894325.365912 sender=:1.1 -> destination=(null destination) serial=4880989 path=/org/freedesktop/systemd1/unit/sys_2ddevices_2dvirtual_2dblock_2ddm_5cx2d2_2edevice; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.freedesktop.systemd1.Device" array [ dict entry( string "SysFSPath" variant string "/sys/devices/virtual/block/dm-2" ) ] array [ ] signal time=1676894325.366042 sender=:1.1 -> destination=(null destination) serial=4880990 path=/org/freedesktop/systemd1/unit/sys_2ddevices_2dvirtual_2dblock_2ddm_5cx2d2_2edevice; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.freedesktop.systemd1.Unit" array [ dict entry( string "ActiveState" variant string "active" ) dict entry( string "SubState" variant string "plugged" ) dict entry( string "StateChangeTimestamp" variant uint64 1676892339266329 ) dict entry( string "StateChangeTimestampMonotonic" variant uint64 19734942 ) dict entry( string "InactiveExitTimestamp" variant uint64 1676892339266329 ) dict entry( string "InactiveExitTimestampMonotonic" variant uint64 19734942 ) dict entry( string "ActiveEnterTimestamp" variant uint64 1676892339266329 ) dict entry( string "ActiveEnterTimestampMonotonic" variant uint64 19734942 ) dict entry( string "ActiveExitTimestamp" variant uint64 0 ) dict entry( string "ActiveExitTimestampMonotonic" variant uint64 0 ) dict entry( string "InactiveEnterTimestamp" variant uint64 0 ) dict entry( string "InactiveEnterTimestampMonotonic" variant uint64 0 ) dict entry( string "Job" variant struct { uint32 0 object path "/" } ) dict entry( string "ConditionResult" variant boolean false ) dict entry( string "AssertResult" variant boolean false ) dict entry( string "ConditionTimestamp" variant uint64 0 ) dict entry( string "ConditionTimestampMonotonic" variant uint64 0 ) dict entry( string "AssertTimestamp" variant uint64 0 ) dict entry( string "AssertTimestampMonotonic" variant uint64 0 ) dict entry( string "InvocationID" variant array of bytes [ 4c 6f ff 28 3e 58 4e 6e 81 82 b3 1c 0c 83 82 3b ] ) ] array [ string "Conditions" string "Asserts" ] signal time=1676894325.366191 sender=:1.1 -> destination=(null destination) serial=4880991 path=/org/freedesktop/systemd1/unit/dev_2ddm_5cx2d2_2edevice; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.freedesktop.systemd1.Device" array [ dict entry( string "SysFSPath" variant string "/sys/devices/virtual/block/dm-2" ) ] array [ ] signal time=1676894325.366431 sender=:1.1 -> destination=(null destination) serial=4880992 path=/org/freedesktop/systemd1/unit/dev_2ddm_5cx2d2_2edevice; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.freedesktop.systemd1.Unit" array [ dict entry( string "ActiveState" variant string "active" ) dict entry( string "SubState" variant string "plugged" ) dict entry( string "StateChangeTimestamp" variant uint64 1676892339266328 ) dict entry( string "StateChangeTimestampMonotonic" variant uint64 19734941 ) dict entry( string "InactiveExitTimestamp" variant uint64 1676892339266328 ) dict entry( string "InactiveExitTimestampMonotonic" variant uint64 19734941 ) dict entry( string "ActiveEnterTimestamp" variant uint64 1676892339266328 ) dict entry( string "ActiveEnterTimestampMonotonic" variant uint64 19734941 ) dict entry( string "ActiveExitTimestamp" variant uint64 0 ) dict entry( string "ActiveExitTimestampMonotonic" variant uint64 0 ) dict entry( string "InactiveEnterTimestamp" variant uint64 0 ) dict entry( string "InactiveEnterTimestampMonotonic" variant uint64 0 ) dict entry( string "Job" variant struct { uint32 0 object path "/" } ) dict entry( string "ConditionResult" variant boolean false ) dict entry( string "AssertResult" variant boolean false ) dict entry( string "ConditionTimestamp" variant uint64 0 ) dict entry( string "ConditionTimestampMonotonic" variant uint64 0 ) dict entry( string "AssertTimestamp" variant uint64 0 ) dict entry( string "AssertTimestampMonotonic" variant uint64 0 ) dict entry( string "InvocationID" variant array of bytes [ 0c b8 d1 90 42 3e 45 b6 88 f3 71 6e 66 1e 83 c5 ] ) ] array [ string "Conditions" string "Asserts" ]
同时运行udevadm monitor也看到类似的高频变更消息,刷屏速度稍慢一点,示例如下:
KERNEL[2188.932041] change /devices/virtual/block/dm-2 (block) UDEV [2188.940914] change /devices/virtual/block/dm-2 (block) KERNEL[2188.945441] change /devices/virtual/block/dm-2 (block) UDEV [2188.957689] change /devices/virtual/block/dm-2 (block) KERNEL[2188.961225] change /devices/virtual/block/dm-2 (block) UDEV [2188.969813] change /devices/virtual/block/dm-2 (block) KERNEL[2188.974779] change /devices/virtual/block/dm-2 (block)
我查了一下dm-2的信息,它对应的是我的home分区:
~$ ls -l /dev/mapper/ total 0 crw------- 1 root root 10, 236 Feb 20 11:25 control lrwxrwxrwx 1 root root 7 Feb 20 12:02 home -> ../dm-2 lrwxrwxrwx 1 root root 7 Feb 20 11:25 sda3_crypt -> ../dm-0 lrwxrwxrwx 1 root root 7 Feb 20 11:25 swap -> ../dm-1
由于我对dbus和udev的了解有限,搜了一圈后找到一个临时解决办法:创建/etc/udev/rules.d/90-fixdm.rules文件(注:原内容里写的rulesd是笔误,正确路径为rules.d),内容如下:
ACTION=="add|change", KERNEL=="dm-*", OPTIONS:="nowatch"
这个方法确实立刻见效,那两个进程的CPU占用马上降了下来,风扇也停了。但第二天启动笔记本的时候,却卡在了"waiting for /dev/mapper/swap"的环节,完全进不去系统。我只能用Ubuntu Live U盘启动,删掉了这个规则文件,系统才恢复正常,但高CPU占用的问题又回来了。
现在想请教大家,最近可能是什么变化导致了这个问题?有没有什么既能解决高CPU占用,又不会影响系统启动的办法?
谢谢!
备注:内容来源于stack exchange,提问作者dfluff
相关产品推荐
相关产品推荐

