Systemd vs Cgroupfs driver 对比
简单来说:
-
Systemd 目前是 Linux init 默认启动方式,是对
cgroup
的 一次包装(随操作系统发布,天生屏蔽cgroup v1
和cgroup v2
的差异) -
Cgroupfs 是
cgroup 子系统
的另一种实现方式,控制力度在Linux user
级别
总体而已: Systemd
和 Cgroupfs
本身没有优缺点之分. cgroupfs Driver
通过cgroupfs
设置的Cgroups
、systemd
通过cgroupfs
设置的Cgroups
和Linux Kernel
没有区别。
申请推荐使用 Systemd
的原因解决:
kubelet
和runtime runc
后续不用同时支持cgroup v1
和cgroup v2
。cgroup v2差异化能力让Systemd
处理
现象分析
$ journalctl --boot --unit sshd
Nov 16 12:20:48.022631 xxxxxxxxxx sshd[766]: pam_systemd(sshd:session): Failed to create session: Connection timed out
环境
环境情况
$ systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
$ cat /etc/centos-release
BigCloud Enterprise Linux For LDK release 7.5.1812 (Core)
$ uname -a
Linux xxxxxxxxxxxxxxxxx 4.14.78-300.el7.bclinux.x86_64 #1 SMP Sat Jan 5 15:49:43 CST 2019 x86_64 x86_64 x86_64 GNU/Linux
验证
模拟systemctl
请求Dbus
总线超时问题
通过本机(笔记本) ssh
到 被压测集群
$ cat run.sh
while [ 1 ]; do
(time ssh $1 "echo OK > /dev/null") 2>&1 | grep ^real >> log
done
$ ./run.sh xxx.xxx.xxx.xxx
当发送了1022
个 logins后, 第1023
个登入,会出现 25s+
超时
$ cat log | grep 0m0 | wc -l
1022
$ cat log | grep 0m25 | wc -l
4
$ tail -5 log
real 0m0.222s
real 0m25.232s
real 0m25.235s
real 0m25.236s
real 0m25.239s
在 /var/log/auth.log
和 /var/log/messages
文件中复现了这个问题
$ cat /var/log/auth.log
...
Nov 16 23:55:28 test sshd[3666]: pam_unix(sshd:session): session opened for user by (uid=0)
Nov 16 23:55:28 test systemd-logind[105]: New session c1022 of user centos.
Nov 16 23:55:28 test systemd-logind[105]: Failed to root session scope: Transport endpoint is not connected
Nov 16 23:55:28 test sshd[3666]: pam_systemd(sshd:session): Failed to create session: Message recipient disconnected from message bus without replying...
$ cat /var/log/messages
2022-11-16T23:55:28.272449+08:00 test systemd-logind[105]: Failed to start session scope session-xxxxx.scope: The maximum number of pending replies per connection has been reached
尝试修复
按社区方式修复:
- 用户会话和系统有一组不同的限制(在
session.conf
和system.conf
中配置)
调大 dbus
总线数, 问题解决(埋得更深了
)
$ /etc/dbus-1/system-local.conf
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus 总线配置 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<limit name="max_replies_per_connection">50000</limit>
</busconfig>
社区也有其他fix方法: 将25s调大到90s
问题?
为啥线上部署会有这个问题? 是不是远程执行没有释放? 导致dbus拥塞,不得而知…
「如果这篇文章对你有用,请随意打赏」
如果这篇文章对你有用,请随意打赏
使用微信扫描二维码完成支付