调试卡死的Python进程

本文基于CentOS 7,介绍线上程序运行卡死时的调试方法。通用调试方法包括查看进程号、进程卡在的系统回调、系统回调文件操作符含义及进程当前文件操作。还介绍了用gdb直接查看进程卡死在哪行Python代码,以及相关参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时线上程序运行过程中出现卡死(阻塞),无法通过断点或log找到问题,需通过其他方式调试。本文基于CentOS 7。

通用调试方法

查看进程号:
ps auxf

查看此进程卡在哪个系统回调:

strace -p pid

pid替换为实际进程号。此命令会返回一个系统回调和文件操作符。

检查上一条命令系统回调的文件操作符的含义:

ls -l /proc/pid/fd

数字就是文件操作符。

/proc/pid 中还包含其他很多进程信息,有兴趣可自行研究。

列出此进程当前的文件操作:

lsof -p pid

查看卡死的Python代码

如果想直接看到进程卡死在哪行代码可以使用gdb。

阿里云默认源无debuginfo, 需添加源地址:

sudo vim /etc/yum.repos.d/CentOS-Debug.repo

#Debug Info
[debug]
name=CentOS-$releasever - DebugInfo
baseurl=http://debuginfo.centos.org/$releasever/$basearch/
gpgcheck=0
enabled=1
protect=1
priority=1

sudo yum install gdb
sudo yum install yum-utils
sudo debuginfo-install glibc
sudo yum install python-debuginfo

进入gdb环境:

gdb python *pid*

显示当前进程执行位置:

py-list

显示当前执行位置的调用栈:

py-bt

参考资料:

DebuggingWithGdb
用strace查找进程卡死原因
centos7 安装 debuginfo
使用 gdb 调试运行中的 Python 进程
通过/PROC查看LINUX内核态调用栈来定位卡死问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值