记一次golang进程执行卡住的问题排查

记一次golang进程执行卡住的问题排查

  • 现象

    在linux终端执行 golang 编译的二进制文件,发现进程卡住了,日志输出和终端输出看不到任何信息

  • ps -ef | grep xxx 查看进程 pid

  • cat /proc/$pid/stack 查看进程在内核空间中的函数调用链,显示进程当前在内核中执行到哪里,发现关键字 netlink、recvfrom

bash 复制代码
[<ffffffffb3ddca90>] __skb_wait_for_more_packets+0x120/0x180
[<ffffffffb3ddce5f>] __skb_recv_datagram+0x6f/0xd0
[<ffffffffb3ddcf03>] skb_recv_datagram+0x43/0x60
[<ffffffffb3e22252>] netlink_recvmsg+0x62/0x490
[<ffffffffb3dcc4e5>] sock_recvmsg+0xc5/0x100
[<ffffffffb3dcc658>] SYSC_recvfrom+0xe8/0x160
[<ffffffffb3dce45e>] SyS_recvfrom+0xe/0x10
[<ffffffffb3f1f7d5>] system_call_fastpath+0x1c/0x21
[<ffffffffffffffff>] 0xffffffffffffffff 
  • 分析代码哪里用到了 netlink

    代码 GetLocalIP() 里调用 net.Interfaces() / Interface.Addrs() 获取网卡ip信息

    Go 的 net 包在 Linux 上拿 interface/address 信息,会走到 syscall.NetlinkRIB 这类封装,往 NETLINK_ROUTE 发请求并循环读回包

    用户态在 recvfrom 等待 netlink 的后续 multipart 消息(理论上最终应收到 NLMSG_DONE);但实际未收到更多数据,导致阻塞

  • go issue
    https://github.com/golang/go/issues/69797

相关推荐
小码哥_常3 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
紧跟先前的步伐5 小时前
Go AI Agent 实战 24|工具系统工程化收尾与阶段验收
人工智能·ai·golang·1024程序员节
学长毕设6 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
C^h6 小时前
c++ string
开发语言·c++
raindayinrain6 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
学逆向的6 小时前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao6 小时前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++
日日大王学编程7 小时前
#Feed 流项目复盘:Redis 时间线缓存与 Outbox 消息可靠性设计
golang·1024程序员节
学逆向的7 小时前
C 局部静态变量
c语言·开发语言·网络安全
大都督会赢的7 小时前
C++第一节课
开发语言·c++