1.背景
由于目前项目使用 cgo + golang 本地不能debug, 发生死锁问题,程序运行和期待不一致,通过日志排查可以大概率找到 阻塞范围,但是不能找到具体问题在哪里,同时服务器 通过k8s daemonset 部署没有更好的方式暴露端口 获取pprof web页面
想通过 go tool pprof 排查问题但是 由于mac 还要安装依赖软件 所以使用docker 实现问题排查
2.操作
# 1.生成pprof文件
curl http://localhost:6060/debug/pprof/goroutine > goroutine.pprof
# 2.复制文件到本地
kubectl cp <namespace>/<pod-name>:/filepath -c <containername> ./
# 3.本地mac启动 pprof-web
docker pull lovecho/pprof-web:latest
docker run --rm -it -p 8080:8080 lovecho/pprof-web:latest
# 4.查看浏览器,上传pprof文件
可以搜索方法关键字查询 执行逻辑 以及最终阻塞地方
3.结论
通过 docker + go pprof 实现排查 线程block 问题