前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python进程卡死排查

python进程卡死排查

原创
作者头像
willsiom
发布2024-02-19 19:25:31
5730
发布2024-02-19 19:25:31
举报
文章被收录于专栏:沈钦华的专栏沈钦华的专栏

近期在我们运维管控平台上执行python任务时,出现了卡死的现象。到机器上通过ps查看进程,发现凌晨01:07开始调起的python进程,经过了10多个小时依然没有退出的迹象,正常情况下这类任务执行不会超过10s,这已经严重超出了预期时间。

幸好卡死的进程还在,我们有现场可以对这个进程做进一步分析,定位此时python任务内部在做什么。

1、找到进程pid

首先通过ps -ef找到对应的pid, 拿到对应的python进程pid: 4991

2、通过strace命令: strace -T -tt -e trace=all -p 4991

可以看到此时进程在接收数据。recvfrom(5, 从fd 5接收数据

那么我们进一步看下这个fd 5 到底是什么

通过查看pid 4991打开的fd列表,可以看到fd 5是一个socket,对应inode 4201961360

3、查看inode对应的网络链接信息: netstat -ent|grep 4201961360

可以看到这个socket是与xx.xx.xx.92:80建立的连接,也就是本地python进程一直在等待从xx.xx.xx.92:80接收数据。

至此,大概知道的进程卡死的原因,但是要进一步定位这个接收数据对应python任务的具体哪个方法,以便来优化代码呢?

4、使用py-spy工具查看python任务调用栈,如果机器上没有这个包,可以直接 pip install py-spy安装即可

执行: py-spy record -p 4991 -o my.svg

经过一段时间后使用Control+C结束,这样在当前目录生成一个my.svg的文件。将文件拷贝到本地使用浏览器打开,就可以看到python进程当前的调用栈。

通过查看调用栈发现,出现问题的任务代码在_get()这个方法上(使用了requests这个包发起的网络请求),因此可以对这个方法做进一步的优化。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、找到进程pid
  • 2、通过strace命令: strace -T -tt -e trace=all -p 4991
  • 3、查看inode对应的网络链接信息: netstat -ent|grep 4201961360
  • 4、使用py-spy工具查看python任务调用栈,如果机器上没有这个包,可以直接 pip install py-spy安装即可
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档