漫画:如何分析运行中的 Python 程序?
内容简介
- 如何使用 py-spy
- 如何读懂火焰图
遇到的问题
![245557046a31ea22ece32dd059074dc1.png](https://img-blog.csdnimg.cn/img_convert/245557046a31ea22ece32dd059074dc1.png)
大佬组长透露出几个关键信息:
- 1. 要排查的是线上服中正在运行的 Python 程序
- 2.“凌晨 3 点多的时候可能出现”,表示问题并不是每天都出现的
- 3. 问题现象是程序卡死,重启后,有可以正常运行
线上服运行在真实环境,使用真实数据长时间运行,这种非必发性的错误通常难以在测试服或灰度服中发现,而且这种错误看日志通常难以判断出现这种问题的真正原因,可能其他地方的代码出现了问题,但没有被处理,导致异常状态一直堆积,一段时间后才出现的问题。
![bdba8d69febd4dbd98207548cc9d3cd3.png](https://img-blog.csdnimg.cn/img_convert/bdba8d69febd4dbd98207548cc9d3cd3.png)
根据上面的关键信息,我开始进行如下思考:
- 1. 思考是否可以构建「最小实例进行复现呢?」,可以复现就说明找到了问题。
- 2. 是代码的问题还是其他依赖服务存在问题导致本 Python 程序出现问题?
![ba45725f09c16774866766aaec907bbc.png](https://img-blog.csdnimg.cn/img_convert/ba45725f09c16774866766aaec907bbc.png)
自己在测试环境运行相同的代码,发现没有任何问题,那是其他依赖的问题?这么多依赖服务,一个个查是不现实的,那只能在代码中加多点日志,然后再放到线上去看了?
其实还有使用更简单的方法去定位错误,那就使用 py-spy