每执行一次cdc命令,就创建了一个dbus-daemon进程

Bug 反馈
清晰准确地描述您发现的问题,提供任何可能复现问题的步骤有助于研发同学及时处理问题
【 Bug 的影响】
每执行一次cdc的命令(包括cdc -h, cdc version),后台就创建了一个/usr/bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session进程,导致堆积了一大堆这个进程


【可能的问题复现步骤】

【看到的非预期行为】

【期望看到的行为】

【相关组件及具体版本】
cdc版本:v5.3.0
【其他背景信息或者截图】

没法复现你说的这种情况, 能提供更详细的信息吗?cdc 是从官方下载的吗?

[root@copy-of-vm-ee-centos76-v1 5.3]# pwd
/root/5.3
[root@copy-of-vm-ee-centos76-v1 5.3]# wget https://tiup-mirrors.pingcap.com/cdc-v5.3.0-linux-amd64.tar.gz
--2022-02-18 11:07:02--  https://tiup-mirrors.pingcap.com/cdc-v5.3.0-linux-amd64.tar.gz
Resolving tiup-mirrors.pingcap.com (tiup-mirrors.pingcap.com)... 42.81.118.41
Connecting to tiup-mirrors.pingcap.com (tiup-mirrors.pingcap.com)|42.81.118.41|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 54156566 (52M) [application/x-compressed]
Saving to: ‘cdc-v5.3.0-linux-amd64.tar.gz’

100%[==============================================================================>] 54,156,566  9.54MB/s   in 5.4s   

2022-02-18 11:07:08 (9.61 MB/s) - ‘cdc-v5.3.0-linux-amd64.tar.gz’ saved [54156566/54156566]

[root@copy-of-vm-ee-centos76-v1 5.3]# tar zxvf cdc-v5.3.0-linux-amd64.tar.gz 
cdc
[root@copy-of-vm-ee-centos76-v1 5.3]# ps -ef | grep dbus-daemon
dbus       838     1  0  2021 ?        03:50:14 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
root      9865  4159  0 11:07 pts/1    00:00:00 grep --color=auto dbus-daemon
[root@copy-of-vm-ee-centos76-v1 5.3]# ./cdc version
Release Version: v5.3.0
Git Commit Hash: 20626babf21fc381d4364646c40dd84598533d66
Git Branch: heads/refs/tags/v5.3.0
UTC Build Time: 2021-11-22 10:37:02
Go Version: go version go1.16.4 linux/amd64
Failpoint Build: false

[root@copy-of-vm-ee-centos76-v1 5.3]# ps -ef | grep dbus-daemon
dbus       838     1  0  2021 ?        03:50:14 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
root      9886  4159  0 11:07 pts/1    00:00:00 grep --color=auto dbus-daemon
[root@copy-of-vm-ee-centos76-v1 5.3]# ./cdc -h
Change Data Capture

Usage:
  cdc [command]

Available Commands:
  cli         Manage replication task and TiCDC cluster
  help        Help about any command
  redo        Manage redo logs of TiCDC cluster
  server      Start a TiCDC capture server
  version     Output version information

Flags:
  -h, --help   help for cdc

Use "cdc [command] --help" for more information about a command.
[root@copy-of-vm-ee-centos76-v1 5.3]# ps -ef | grep dbus-daemon
dbus       838     1  0  2021 ?        03:50:14 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
root      9919  4159  0 11:08 pts/1    00:00:00 grep --color=auto dbus-daemon

我查了好多资料发现是我的环境里的DBUS_SESSION_BUS_ADDRESS环境变量没有设置。

通过strace跟踪cdc的命令发现,当DBUS_SESSION_BUS_ADDRESS环境变量没有设置时,会执行dbus-launch

当设置了DBUS_SESSION_BUS_ADDRESS环境变量后,cdc就不会调用dbus-launch, 而是直接connect这个变量里的abstract值

估计cdc 5.3.0这个版本(测试了4.0.11就没有这个问题)需要使用dbus-deamon进程,而这个进程一般来说是系统自动拉起的,并且会自动设置DBUS_SESSION_BUS_ADDRESS这个环境变量,但是我的环境里没有这个变量,然后cdc可能就认为没有这个进程,于是自己调用dbus-launch命令产生一个新的dbus-deamon进程。

另外,测试了systemd拉起的cdc server也会产生一个dbus-daemon子进程,但是用systemctl停止cdc server后该子进程会被销毁


但是如果是直接执行一个cdc命令后,例如cdc cli, cdc -h,cdc version,dbus-daemon进程不会被自动销毁,就出现了一大堆的dbus-daemon进程残留

2 个赞

cdc 依赖的 pulsar client 引入了 keyring 这个库, 而 keyring 这个库会在 init 函数里就去尝试创建 dbus-daemon
我提了一个 https://github.com/pingcap/tiflow/issues/4926 issue 来修复这个问题