python 64式: 第17式、死锁或进程hang住调试方法

步骤1:下载python-debuginfo
如果已经发现有/etc/yum.repos.d/xxx-Debuginfo.repo,就不需要下载
修改
/etc/yum.repos.d/xxx-Debuginfo.repo
将其中的
enabled=0
修改为
enabled=1

步骤2:下载gdb
yum install gdb -y


步骤3: 下载debug信息包
然后执行如下命令
yum install python-debuginfo -y
如果无法下载,就执行如下命令更新yum:。
yum makecache
然后再执行:
yum install python-debuginfo -y


步骤4: 连接到进程
gdb -p pid
pid是指进程号,可以通过 ps -ef 查看,请替换为实际的进程号

步骤5: 打印信息
py-bt
解释: 查看当前进程的堆栈信息,这是很重要的命令,一般可以看到进程运行到哪里发生死锁或者卡住,进而可以回到python源码确定最终问题在哪里

py-list
解释: 显示python进程当前代码运行到哪里

py-locals
解释: 显示当前进程中的局部变量

py-print
解释: 打印python变量的值
用法: 例如
py-print self

info threads
thread <thread-num>
解释: 先查看线程信息,然后切换线程想要查看的线程



thread apply all py-list:
解释:查看所有进程执行位置

附:
另外一个可以连接到python进程的工具是pyrasite-shell,安装命令为:
pip install pyrasite
用法:
pyrasite-sehll pid
解释: pid是进程号。可通过ps -ef查看

参考:
[1] https://devguide.python.org/gdb/
[2] https://www.jianshu.com/p/d150563f49a3
[3] https://pyrasite.readthedocs.io/en/latest/Shell.html

猜你喜欢

转载自blog.csdn.net/qingyuanluofeng/article/details/83932917