为了账号安全,请及时绑定邮箱和手机立即绑定

如何转储正在运行的 kubelet 的 goroutine 堆栈竞争

如何转储正在运行的 kubelet 的 goroutine 堆栈竞争

Go
慕哥9229398 2023-06-26 16:37:00
kubernetes比较复杂,kubelet在某些场景下长时间运行后会出现死锁。有没有办法转储正在运行的 kubelet 的 goroutine 堆栈跟踪?如下的预期输出对于调试 kubelet 的死锁类型问题非常有帮助。goroutine 386 [chan send, 1140 minutes]:k8s.io/kubernetes/pkg/kubelet/pleg.(*GenericPLEG).relist(0xc42069ea20)    /workspace/anago-v1.11.5-beta.0.24+753b2dbc622f5c/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/pleg/generic.go:261 +0x74ek8s.io/kubernetes/pkg/kubelet/pleg.(*GenericPLEG).(k8s.io/kubernetes/pkg/kubelet/pleg.relist)-fm()    /workspace/anago-v1.11.5-beta.0.24+753b2dbc622f5c/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/pleg/generic.go:130 +0x2ak8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil.func1(0xc4212ee520)    /workspace/anago-v1.11.5-beta.0.24+753b2dbc622f5c/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133 +0x54k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil(0xc4212ee520, 0x3b9aca00, 0x0, 0x1, 0xc420056540)    /workspace/anago-v1.11.5-beta.0.24+753b2dbc622f5c/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:134 +0xbdk8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait.Until(0xc4212ee520, 0x3b9aca00, 0xc420056540)    /workspace/anago-v1.11.5-beta.0.24+753b2dbc622f5c/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88 +0x4dcreated by k8s.io/kubernetes/pkg/kubelet/pleg.(*GenericPLEG).Start    /workspace/anago-v1.11.5-beta.0.24+753b2dbc622f5c/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/pleg/generic.go:130 +0x88我很感激任何人都可以分享关于如何转储 kubelet 的 goroutine 堆栈竞争的经验,就像 docker 提供的那样[1]$ pkill -SIGUSR1 dockerd[1]. https://success.docker.com/article/how-to-dump-goroutines-stacktraces
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

  1. pprof,它将保持 kubelet 运行

  • 在node-x上安装go

  • 在一个终端中运行“kubectl proxy”

  • 卷曲 http://localhost:8001/api/v1/proxy/nodes/node-x/debug/pprof/goroutine?debug=2

注意:API针对不同的k8s版本进行了更改,对于1.16,它是curl http://127.0.0.1:8001/api/v1/nodes/node-**/proxy/debug/pprof/goroutine?debug=2

  1. 向 kubelet 发送信号,导致 kubelet 退出并出现堆栈转储

    杀死-SIGABRT


查看完整回答
反对 回复 2023-06-26
  • 1 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信