读懂这一篇,集群节点不下线( 七 )
拆分之后 , 其包括 docker daemon , containerd , containerd-shim 以及 runC 。 组件 containerd 负责集群节点上容器的生命周期管理 , 并向上为 docker daemon 提供 gRPC 接口 。
在这个问题中 , 既然 PLEG 认为容器运行是出了问题 , 我们需要先从 docker daemon 进程看起 。 我们可以使用 kill -USR1 命令发送 USR1 信号给 docker daemon , 而 docker daemon 收到信号之后 , 会把其所有线程调用栈输出到文件 /var/run/docker 文件夹里 。
Docker daemon 进程的调用栈相对是比较容易分析的 。 稍微留意 , 我们会发现大多数的调用栈都类似下图中的样子 。
通过观察栈上每个函数的名字 , 以及函数所在的文件(模块)名称 , 我们可以看到 , 这个调用栈下半部分 , 是进程接到 http 请求 , 做请求路由的过程;而上半部分则进入实际的处理函数 。 最终处理函数进入等待状态 , 等待的是一个 mutex 实例 。
到这里 , 我们需要稍微看一下 ContainerInspectCurrent 这个函数的实现 , 而最重要的是 , 我们能搞明白这个函数的第一个参数 , 就是 mutex 的指针 。 使用这个指针搜索整个调用栈文件 , 我们会找出 , 所有等在这个 mutex 上边的线程 。
推荐阅读
- 地下城堡|《代号:破晓》官网“暗藏”剧情,你都读懂了吗?
- |开始·这是一个开始?开始
- 北凉悍刀行|这是一篇超详细的《北凉悍刀行》手游攻略
- 打野|王者荣耀:S25赛季打野需要注意什么?读懂这篇攻略,轻松上分
- 小智|《宝可梦》与火系御三家的对战,小智靠逆属性赢得对战胜利?
- 剑网3|剑三史上开车最离奇的外观,只因一篇818,便让黄牛高价囤货
- 地下城与勇士|DNF:零氪与充钱的差距到底有多大?这一篇文章将颠覆你的认知!
- 我的世界|我的世界:没有女朋友?那还不看过来,一篇文章教你找老婆
- 地下城与勇士|书荒是不可能的,这辈子都不可能书荒(DNF一篇)
- s5|一篇文章彻底玩懂云顶之弈S5赛季!轻松玩会所有阵容!