读懂这一篇,集群节点不下线(15)
我们使用 gdb 打印出 dbus->cookie 这个值 , 可以很清楚看到 , 这个值超过了 0xffffffff 。 所以看起来 , 这个问题是 systemd 在加封过大量 message 之后 , cookie 这个值 32 位溢出 , 新的消息不能被加封导致的 。
另外 , 在一个正常的系统上 , 使用 gdb 把 bus->cookie 这个值改到接近 0xffffffff , 然后观察到 , 问题在 cookie 溢出的时候立刻出现 , 则证明了我们的结论 。
5. 怎么判断集群节点 NotReady 是这个问题导致的
首先我们需要在有问题的节点上安装 gdb 和 systemd debuginfo , 然后用命令 gdb / usr/lib / systemd / systemd 1 把 gdb attach 到 systemd , 在函数 sd_bus_send 设置断点 , 之后继续执行 。
等 systemd 踩到断点之后 , 用 p /x bus->cookie 查看对应的 cookie 值 , 如果此值超过了 0xffffffff , 那么 cookie 就溢出了 , 则必然导致节点 NotReady 的问题 。 确认完之后 , 可以使用 quit 来 detach 调试器 。
问题修复
这个问题的修复 , 并没有那么直截了当 。 原因之一是 systemd 使用了同一个 cookie 变量来兼容 dbus1 和 dbus2 。
推荐阅读
- 地下城堡|《代号:破晓》官网“暗藏”剧情,你都读懂了吗?
- |开始·这是一个开始?开始
- 北凉悍刀行|这是一篇超详细的《北凉悍刀行》手游攻略
- 打野|王者荣耀:S25赛季打野需要注意什么?读懂这篇攻略,轻松上分
- 小智|《宝可梦》与火系御三家的对战,小智靠逆属性赢得对战胜利?
- 剑网3|剑三史上开车最离奇的外观,只因一篇818,便让黄牛高价囤货
- 地下城与勇士|DNF:零氪与充钱的差距到底有多大?这一篇文章将颠覆你的认知!
- 我的世界|我的世界:没有女朋友?那还不看过来,一篇文章教你找老婆
- 地下城与勇士|书荒是不可能的,这辈子都不可能书荒(DNF一篇)
- s5|一篇文章彻底玩懂云顶之弈S5赛季!轻松玩会所有阵容!