记一次线上python hang故障

本文记录了一次线上Python服务出现偶发性CPU使用率为100%并hang住的问题。故障排查过程中,通过strace追踪系统调用,发现进程陷入死循环。通过对文件描述符的分析,定位到问题代码,最终修复了故障。同时介绍了strace工具在故障诊断中的应用。
摘要由CSDN通过智能技术生成

故障排查过程

背景介绍

记一次线上python程序故障~~这个出问题的服务是一个使用zerorpc库搭建起来的简单RPC服务,负责向某个服务的management端口发送命令并记录命令的返回结果(与management端口使用socket进行通信)

故障现象

故障是偶发的,表现为进程CPU使用率为100%,整个进程hang住,无法对调用做出应答。

问题的解决思路是

  • 找出故障时的程序堆栈。像C和C++可以使用gdb打印backtrace, java可以使用jstack,python应该也有类似的方法。在网上找到了gdb + python-debuginfo的方法:https://wiki.python.org/moin/DebuggingWithGdb,不过试了一下没有成功,后面有时间再研究。
  • 于是尝试:
    1. strace -p pid 打印系统调用堆栈,有系统调用函数和文件描述符信息(短短几秒打印出几十万行,不断执行poll和recvfrom,初步判断陷入死循环)如图所示:
    strace输出信息
    2. 找出上一步的文件描述符(fd),再ls -l /proc/pid/fd | grep
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值