当前位置: 首页 > 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图文混排实现方式详解
  • SegmentFault for Android 3.0 发布
  • __proto__ 和 prototype的关系
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • Linux各目录及每个目录的详细介绍
  • mysql 5.6 原生Online DDL解析
  • MySQL的数据类型
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • use Google search engine
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 力扣(LeetCode)357
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 悄悄地说一个bug
  • 区块链技术特点之去中心化特性
  • 什么是Javascript函数节流?
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 小程序开发之路(一)
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 正则表达式小结
  • elasticsearch-head插件安装
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #pragam once 和 #ifndef 预编译头
  • #考研#计算机文化知识1(局域网及网络互联)
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • ${ }的特别功能
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .axf 转化 .bin文件 的方法
  • .htaccess 强制https 单独排除某个目录
  • .net(C#)中String.Format如何使用
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET与 java通用的3DES加密解密方法
  • .Net中的设计模式——Factory Method模式
  • ::
  • @Documented注解的作用