首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与主分区相关的dbus-daemon和systemd-udevd的高CPU使用率

与主分区相关的dbus-daemon和systemd-udevd的高CPU使用率
EN

Ask Ubuntu用户
提问于 2023-02-20 12:09:02
回答 1查看 340关注 0票数 2

我正在运行Ubuntu20.04.5LTS,并使用gnome-经典桌面(因为我坚持自己的方式)。当我最初登录时,我总是注意到dbus-daemon中有几分钟的高CPU,但是它总是会降到一个可以接受的水平。然而,在过去的几天里,dbus-守护进程和system占CPU的50%,并且在笔记本电脑运行期间还没有解决,导致风扇不断运行。

我运行了dbus-monitor --system,它给出了非常快的消息假脱机运行,如下所示:

代码语言:javascript
复制
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提供了类似的消息流,但速度不太快,如下所示:

代码语言:javascript
复制
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应该受到指责。dm-2是我的主分区:

代码语言:javascript
复制
~$ 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的理解至少是有限的,但是googling让我找到了这个职位,它建议我创建一个包含/etc/udev/rulesd/90-fixdm.rules的文件。

代码语言:javascript
复制
ACTION=="add|change", KERNEL=="dm-*", OPTIONS:="nowatch"

这确实使这两个进程平静下来,并使我的CPU周期恢复正常(并且阻止了笔记本电脑风扇的不断运行)。然而,第二天,笔记本电脑未能启动,挂在一个“等待/dev/mapper/交换”作业中,这个作业从未启动。一次惊慌失措的使用Live坚持在稍后从/etc/udev/rulesd/90-fixdm.rules中删除文件,我又回到了起点--笔记本电脑重新启动,但是dbus-daemonsystem-udevd的CPU使用率很高。

是什么改变了导致这种新行为的原因,我又能做些什么来解决这个问题呢?

谢谢。

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2023-02-20 15:20:17

看来我已经解决了这个问题。

一位朋友向这个问题介绍了EXT4的特点。使用tune2fs -l /dev/dm-2 | grep -i mmp检查该设备时发现,这个文件系统(以及其他任何文件系统)都启用了MMP:

代码语言:javascript
复制
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit mmp flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum

我不认为我对MMP功能有任何需求,所以我尝试注销并作为根用户执行控制台登录,这样我就可以卸载/home,但是即使卸载了它,我也无法删除mmp标志,因为它总是声明设备在使用中(据我所知,它没有)。我必须在恢复模式下重新启动并放到根shell中,只有这样,我才能够用以下方式删除MMP标志:

代码语言:javascript
复制
# umount /dev/dm-2
# tune2fs -O ^mmp /dev/dm-2

然后,我像往常一样重新启动和登录,现在我正在运行,而没有使用dbus-守护进程和systemd的高CPU使用率,运行udevadm monitor不再提供无休止的消息流。

我只想提到,由于这个答案在上述相关问题上提到,这是较新版本的udisks2的一个问题,但建议已经修正了,我的20.04.05LTS安装似乎有2.8.4-1ubuntu2版本,类似地,在该答案下的评论表明2.9.2-2+deb11u1仍然存在相同的问题。

票数 3
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1455801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档