线上 python http server profile 实践

背景:

qa 容器数量太高,可能的缘由有 api 请求的不合理调用,api 自己的性能问题等,目前的问题难以定位,因此准备出一个 qa 的 profile 分析资源消耗。python

需求

可视化的形式查看总体 http server 的响应时间占比,定位大头优先消除。git

工具

python 系的 profile 工具总体上是在太少,cprofile 用起来有些蛋疼,找了半天决定用 nylas 以前的一个 demo。github

这个工具须要 server 端是 gevent,号称不用 gevent 也能用,不过须要改代码。api

profile 工具,此工具采用unix singal 的方式定时采集 frame python 的栈信息,须要 hack 到生成代码,而且须要启动一个采集进程,因为 github 给出的应该是个 demo,可视化的 server 目前长时间采集会有问题(采集一段时间后数据过大,页面卡顿,可是原服务的响应 彷佛不受影响)curl

另外,原项目中的代码须要 python 编译时作一些事情,我 fork 了一份作了一点修改。具体操做见 README工具

https://github.com/duoduo369/...性能

用法

我决定仍是从 README 贴过来url

test.sh 脚本的内容就是一波 curl 请求,每秒执行一次,跑个一小时好了,再大 demo 的 http 可视化工具可能卡。spa

git clone 这个项目
cd 到项目目录
pip install -e .

将 stacksampler.py 复制到项目目录,在按照 readme
中代码修改的方式修改对应代码

项目启动后执行
python -m stackcollector.collector --host localhost --ports 16384 --interval 60
写一个批量请求脚本 test.sh
每秒执行
watch -n1 test.sh

可视化工具
python -m stackcollector.visualizer --port 5555
若是项目所在机器没法经过5555端口访问,将 /var/lib/stackcollector
下的全部文件复制到能够访问机器访问

分析

就拿 demo 中的这张图来看,须要横着看+竖着看,每一行相加,每一起(假设为 A)垂直上面一格全部小块相加等于这一块(A)。因此找面积最大的追踪查看便可。unix

clipboard.png

相关文章
相关标签/搜索