记一次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

相关推荐
devmoon18 小时前
从 0 到 1 实现两条独立区块链Parachain的跨链通信能力之实操指南
开发语言·rust·区块链·信息与通信·polkadot
程序员清风18 小时前
2026年必学:Vibe Coding几个实用技巧,老手都在偷偷用!
java·后端·面试
清水白石00818 小时前
依赖注入的优雅:不用框架,在 Python 中实现轻量级依赖注入
开发语言·python
游乐码18 小时前
c#里氏替换
开发语言·c#
未来之窗软件服务18 小时前
AI人工智能(十二)C# 运行sensevoice onnx—东方仙盟练气期
开发语言·人工智能·c#·仙盟创梦ide·东方仙盟
weixin_4404016918 小时前
Python数据分析-合并清洗与转换(concat+lambda函数+apply+删除drop/替换数据replace)
开发语言·python·数据分析
Dxy123931021618 小时前
Python如果遇见乱码可以通过二进制判断是什么编码吗?
开发语言·python
TTBIGDATA18 小时前
【Atlas】Atlas 搜索时报 `__AtlasUserProfile` 不存在导致事务回滚
开发语言·python·ambari·kerberos·ranger·atlas·bigtop
devmoon18 小时前
区块链预言机(Oracle)解析:Polkadot、以太坊与 Solana 如何把现实世界带入链上?
开发语言·oracle·区块链·信息与通信·以太坊·polkadot·solana
忙碌54418 小时前
Spring Boot应用Docker化部署全攻略:从入门到生产环境实践
spring boot·后端·docker