当前位置: 首页 > news >正文

线上 python http server profile 实践

背景:

qa 容器数量过高,可能的原因有 api 请求的不合理调用,api 本身的性能问题等,目前的问题难以定位,所以准备出一个 qa 的 profile 分析资源消耗。

需求

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

工具

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

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

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

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

https://github.com/duoduo369/...

用法

我决定还是从 README 贴过来

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

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)。所以找面积最大的追踪查看即可。

clipboard.png

相关文章:

  • 关于Unity中如何立即中断动画然后重新开始播放
  • windows下安装bpython方法 (新)
  • 为tomcat配置项目必须的引擎文件
  • ORACLE in与exists语句的区别
  • HDU 6170 - Two strings | 2017 ZJUT Multi-University Training 9
  • WebLogic 10.3.6与JDK 1.7的兼容问题
  • vnx通过iscsi连接esxi主机,并挂载nfs和block
  • 栈和队列
  • 查看索引的状态
  • 二级MSOffice高级应用考试大纲(2013年版)
  • POJ 1830 开关问题 高斯消元
  • CAN协议,系统结构和帧结构
  • New Concept English Two 11 28
  • centos 配置sudo记录日志
  • Android图文混排实现方式详解
  • 【Leetcode】101. 对称二叉树
  • EOS是什么
  • extract-text-webpack-plugin用法
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript异步流程控制的前世今生
  • JS 面试题总结
  • 编写高质量JavaScript代码之并发
  • 不上全站https的网站你们就等着被恶心死吧
  • 猴子数据域名防封接口降低小说被封的风险
  • 如何使用 JavaScript 解析 URL
  • 如何用vue打造一个移动端音乐播放器
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 我建了一个叫Hello World的项目
  • 系统认识JavaScript正则表达式
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 【干货分享】dos命令大全
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​马来语翻译中文去哪比较好?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #、%和$符号在OGNL表达式中经常出现
  • #etcd#安装时出错
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (安卓)跳转应用市场APP详情页的方式
  • (笔试题)分解质因式
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (离散数学)逻辑连接词
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)大型网站的系统架构
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .gitignore文件—git忽略文件
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET导入Excel数据
  • .Net组件程序设计之线程、并发管理(一)
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • [145] 二叉树的后序遍历 js
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [AutoSar NVM] 存储架构
  • [AutoSAR系列] 1.3 AutoSar 架构