dengqee
(Dengqee)
1
Bug 反馈
清晰准确地描述您发现的问题,提供任何可能复现问题的步骤有助于研发同学及时处理问题
【 Bug 的影响】
每执行一次cdc的命令(包括cdc -h, cdc version),后台就创建了一个/usr/bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session进程,导致堆积了一大堆这个进程
【可能的问题复现步骤】
【看到的非预期行为】
【期望看到的行为】
【相关组件及具体版本】
cdc版本:v5.3.0
【其他背景信息或者截图】
sdojjy
(Sdojjy)
2
没法复现你说的这种情况, 能提供更详细的信息吗?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
dengqee
(Dengqee)
3
我查了好多资料发现是我的环境里的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 个赞
sdojjy
(Sdojjy)
4
cdc 依赖的 pulsar client 引入了 keyring 这个库, 而 keyring 这个库会在 init 函数里就去尝试创建 dbus-daemon
我提了一个 https://github.com/pingcap/tiflow/issues/4926 issue 来修复这个问题