Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python进程卡死排查

python进程卡死排查

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

近期在我们运维管控平台上执行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 删除。

评论
登录后参与评论
1 条评论
热度
最新
666
666
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
故障排查难?xpu_timer 让大模型训练无死角!
随着大型模型的参数量从十亿量级跃升至万亿级别,其训练规模的急剧扩张不仅引发了集群成本的显著上涨,还对系统稳定性构成了挑战,尤其是机器故障的频发成为不可忽视的问题。对于大规模分布式训练任务而言,可观测性能力成为了排查故障、优化性能的关键所在。所以从事大型模型训练领域的技术人,都会不可避免地面临以下挑战:
可信AI进展
2024/05/20
7160
Linux 使用strace命令查找进程卡死原因
最近遇到某个线上服务进程卡死的情况,但是在本地调试的过程中又没法复现,需要在线上服务器运行一段时间后在某些条件下才会触发。
岛哥的质量效能笔记
2021/09/14
5.1K0
Linux 使用strace命令查找进程卡死原因
Java线上故障排查不会怎么办,p8大佬总结的套路清单带你轻松玩转!
线上故障主要会包括 CPU、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如 jstack、jmap 等工具也是不囿于一个方面的问题的,基本上出问题就是 df、free、top 三连,然后依次 jstack、jmap 伺候,具体问题具体分析即可。
Java程序猿
2021/09/14
4420
急死!CPU被挖矿了,却找不到哪个进程!
最近有朋友在群里反馈,自己服务器的CPU一直处于高占用状态,但用top、ps等命令却一直找不到是哪个进程在占用,怀疑中了挖矿病毒,急的团团转。
轩辕之风
2021/01/06
3.4K0
MySQL DBA如何利用strace/pstack/gdb来定位问题
strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用。 Strace是一个简单的跟踪系统调用执行的工具。在其最简单的形式中,它可以从开始到结束跟踪二进制的执行,并在进程的生命周期中输出一行具有系统调用名称,每个系统调用的参数和返回值的文本行。
老叶茶馆
2020/06/24
2.3K0
精选Python开源项目Top10!
【导读】过去一个月里,我们对近 250 个 Python 开源项目进行了排名,并挑选出热度前 10 的项目。这份清单的平均 github star 数量高达 1140,涵盖了包括性能分析、提取 PDF 中的表格、HTTP Framework、Refactoring, Unix-gazing shell、HTTP APIs、PaperTTY 等主题,希望你能从中找到一个你所感兴趣的项目深入探究。
AI科技大本营
2018/12/12
1.1K0
精选Python开源项目Top10!
炫技!bug 排查大曝光,涉及Linux 内核的那种
编写代码只是程序员的工作之一,调试代码的时间甚至会超过编写代码,之前为大家讲解了很多关于系统、架构、编程等方面的内容,这篇文章就为大家全方位展示一次涉及到内核的 bug 排查过程。
用户6543014
2021/03/09
1.7K0
炫技!bug 排查大曝光,涉及Linux 内核的那种
理解进程间通信
进程是一个实体,两个实体间的通信就需要介质。使用不同的介质,就对应了不同的通信方式。进程的通信方式分为两种,同主机和不同主机。下面我们来逐个分析。
theanarkh
2023/10/30
1810
理解进程间通信
【SRE该掌握的利器】Linux中的strace:深入进程的系统调用
strace用于跟踪程序执行时的系统调用和信号。在Linux中,用户态的进程需要通过系统调用来请求内核态的服务,比如文件操作、网络通信等。strace能够捕获这些调用的详细信息,包括调用的名称、参数和返回值,以及执行这些调用所消耗的时间。
五分钟学SRE
2024/04/23
4160
Linux内核与基础命令学习总结
Linux操作系统博大精深,其中对线程,IO,文件系统等概念的实现都很有借鉴意义。
程序视点
2025/03/15
680
【转】接入层问题故障定位(火焰图等方法)
原文地址 https://www.jianshu.com/p/0bbac570fa4c
保持热爱奔赴山海
2024/11/27
1230
Linux 进程卡住了怎么办?
在我们使用 Linux 系统时,如果网络或者磁盘等 I/O 出问题,会发现进程卡住了,即使用 kill -9 也无法杀掉进程,很多常用的调试工具,比如 strace, pstack 等也都失灵了,是怎么回事?
Juicedata
2022/01/07
5K0
Linux 进程卡住了怎么办?
在个人服务器中,山月是如何排查问题的?
大家好,我是山月。本篇文章帮你了解一些在裸机上的命令以及如何查看指标。本篇文章正在参加掘金的征文活动,大家可以在原文中打开地址给我点个赞。
山月
2021/09/28
7170
[qemu][rbd]librbd连接overflow问题
前言: 后端存储使用Ceph卷,在虚拟机中执行mkfs的时候,遇到卡顿。 卡顿位置不确定,有时候是卡在Guest内部执行discard,有时候执行写superblock。 后来发现,是qemu进程的fd超出了限制导致。 分析: 1,discard 主流的存储,尤其是分布式存储,都是支持thin volume,甚至默认都是thin volume的。写时分配可以节省空间,也可以加快volume创建的速度。 排除是否是discard的问题,可以通过libvirt的配置控制开关。 打开discard,<driver discard='unmap'> 关闭discard,<driver discard='ignore'> 实验之后发现,并不是discard导致的。 2,strace 用strace -f -p QEMU-PID的方式来追踪qemu进程的syscall,可以发现,socket失败。 3,limits ls -al /proc/QEMU-PID/fd | wc -l可以确定当前的qemu已经打开的fd数量。 cat /proc/QEMU-PID/limits | grep “Max open files”可以确定当前的qemu最多可以打开的文件的数量,当然,其中也包括TCP连接数量。 发现,确实达到了阈值。 4,netstat netstat -apt | grep QEMU-PID | wc -l 可以发现,一个500G的volume,在Guest里面全盘随机IO之后,大约消耗了接近2K个TCP连接。 那么,就很容易解释为什么qemu的fd爆了。由于qemu的limits是从libvirtd继承过来的,所以,需要修改libvirtd的limits。 5,LimitNOFILE 由于libvirtd是systemd启动的,需要配置systemd的配置。 ibvirt中默认的参数是LimitNOFILE=8192。可以计算出来,可以支持的后端Ceph卷的数量。如果有挂载多个volume的需求,需要扩大这个配置参数。 6,librbd 需要注意的是,尽管因为fd耗尽导致socket失败,但是librbd的api并不会返回error,所以,在qemu的block driver中没有办法处理这个case,也不能report error。 上文修改参数的办法,可以让一个Guest正常工作。但是也有一定的风险。Host上TCP可用的端口共65536个,还有一部分已经reserve起来。 # cat /proc/sys/net/ipv4/ip_local_port_range 确定可用的范围,就可以计算出来一个Host上所有可用的TCP端口数量,进一步计算出来所有可以挂载的Ceph卷的数量。
皮振伟
2019/03/07
2.3K1
初探Linux内核态——通过proc文件系统作快速问题定位
本文是对一篇blog的翻译,感谢译者Hualet Wang。原文通过一个例子为我们展示了,在分析进程运行缓慢的问题时,strace和pstack都束手无策的情况下,不要忘了还有proc。
Linux阅码场
2019/06/05
3.1K0
JAVA 线上故障排查完整套路!牛掰!
线上故障主要会包括 CPU、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如 jstack、jmap 等工具也是不囿于一个方面的问题的,基本上出问题就是 df、free、top 三连,然后依次 jstack、jmap 伺候,具体问题具体分析即可。
程序猿DD
2020/05/26
3.1K0
JAVA 线上故障排查完整套路!牛掰!
Linux进程通信之Unix套接字(一)
当然PHP中还封装了其他两种类型的协议,不常用(SOCK_SEQPACKET 提供一个顺序化的、可靠的、全双工的、面向连接的、固定最大长度的数据通信;数据端通过接收每一个数据段来读取整个数据包和SOCK_RDM 提供一个可靠的数据层,但不保证到达顺序。一般的操作系统都未实现此功能。)
北溟有鱼QAQ
2021/12/12
2.9K0
Linux进程通信之Unix套接字(一)
JVM CPU Profiler技术原理及源码深度解析
研发人员在遇到线上报警或需要优化系统性能时,常常需要分析程序运行行为和性能瓶颈。Profiling技术是一种在应用运行时收集程序相关信息的动态分析手段,常用的JVM Profiler可以从多个方面对程序进行动态分析,如CPU、Memory、Thread、Classes、GC等,其中CPU Profiling的应用最为广泛。
美团技术团队
2019/10/12
1.3K0
JVM CPU Profiler技术原理及源码深度解析
系统之锹sysdig:Linux服务器监控和排障利器
当你需要追踪某个进程产生和接收的系统调用时,首先浮现在你脑海中的是什么?你可能会想到strace,那么你是对的。你会使用什么样的命令行工具来监控原始网络通信呢?如果你想到了tcpdump,你又作出了一个极佳的选择。而如果你碰到必须追踪打开的文件(在Unix意义上:一切皆文件)的需求,可能你会使用lsof。
星哥玩云
2022/07/03
9640
系统之锹sysdig:Linux服务器监控和排障利器
linux深入proc文件系统之pid目录(下)
proc 是一个虚拟文件系统,在Linux 系统中它被挂载于/proc 目录之上。proc 有多个功能 ,这其中包括用户可以通过它访问内核信息或用于排错,这其中一个非常有 用的功能,也是Linux 变得更加特别的功能就是以文本流的形式来访问进程信息。很Linux 命令( 比如 ps 、toPpstree 等) 都需要使用这个文件系统的信息。 maps /proc/[pid]/maps显示进程内存区域映射信息 > cat /proc/1751/maps 00400000-00401000 r-xp 000
入门笔记
2022/06/02
4K0
相关推荐
故障排查难?xpu_timer 让大模型训练无死角!
更多 >
LV.1
快手科技高级系统架构师
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档