近期在我们运维管控平台上执行python任务时,出现了卡死的现象。到机器上通过ps查看进程,发现凌晨01:07开始调起的python进程,经过了10多个小时依然没有退出的迹象,正常情况下这类任务执行不会超过10s,这已经严重超出了预期时间。
幸好卡死的进程还在,我们有现场可以对这个进程做进一步分析,定位此时python任务内部在做什么。
首先通过ps -ef找到对应的pid, 拿到对应的python进程pid: 4991
可以看到此时进程在接收数据。recvfrom(5, 从fd 5接收数据
那么我们进一步看下这个fd 5 到底是什么
通过查看pid 4991打开的fd列表,可以看到fd 5是一个socket,对应inode 4201961360
可以看到这个socket是与xx.xx.xx.92:80建立的连接,也就是本地python进程一直在等待从xx.xx.xx.92:80接收数据。
至此,大概知道的进程卡死的原因,但是要进一步定位这个接收数据对应python任务的具体哪个方法,以便来优化代码呢?
执行: py-spy record -p 4991 -o my.svg
经过一段时间后使用Control+C结束,这样在当前目录生成一个my.svg的文件。将文件拷贝到本地使用浏览器打开,就可以看到python进程当前的调用栈。
通过查看调用栈发现,出现问题的任务代码在_get()这个方法上(使用了requests这个包发起的网络请求),因此可以对这个方法做进一步的优化。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有