使用curl创建简单的性能监控工具
cURL,全称Command Line URL viewer,是一种命令行工具,用来发送网络请求,然后得到和提取数据,显示在标准输出(stdout)。
我们可以使用curl来获取网页的源码,显示头信息,显示通讯过程等。
在做基于http的接口测试的时候,curl基本上可以完成postman所具备的大部分功能,如果你习惯于使用命令行,那么curl是一个非常有用且常用的工具。
CURL的基本使用
查看网页源码
curl www.itest.info
查看response的headers
curl -i www.itest.info
显示通讯过程
curl -v www.itest.info
常用参数
使用curl发送GET请求时有一些常用参数。
- -o: output,将输出的结果重定向到一个文件
- -s: slient, 不显示进度信息
- -w: 展示多维度的统计信息
统计请求耗时
使用下面的这条curl命令可以统计出请求的耗时。
curl www.itest.info -o /dev/null -s -w "%{time_total}\n"
其中我们把输出丢弃了(重定向到/dev/null里),并且不显示进度信息,只展示请求的总耗时。
工具化
基于curl的统计请求耗时的能力,我们可以写一个简单的工具调用curl,然后打印出该请求的耗时。
下面是我用python写的一个简单例子。
# curl_tool.py
import subprocess
import sys
url = sys.argv[-1]
def get_cost(url):
cmd_list = ['curl', '-o', '/dev/null', '-s', '-w', '%{time_total}\n']
cmd_list.append(url)
out = subprocess.Popen(cmd_list, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
stdout, stderr = out.communicate()
cost = float(stdout) * 1000
return cost
print "%s %s\n" %(url, get_cost(url))
使用方式: 在命令行中运行
python curl_tool.py www.itest.info
运行结果
www.itest.info 42.797
这里的单位是毫秒。
改进
我们的工具只支持输入1个url然后拿到耗时的结果,这显然是跟我们日常的需求不符合的。
我们的日常需求是统计n个接口或页面的耗时,然后找出其中耗时最多的m个接口或页面。
下面我们对工具进行改进,使其可以支持多个url/接口的耗时统计。
import subprocess
import sys
# url = sys.argv[-1]
url_list = sys.argv[-1]
def get_cost(url):
cmd_list = ['curl', '-o', '/dev/null', '-s', '-w', '%{time_total}\n']
cmd_list.append(url)
out = subprocess.Popen(cmd_list, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
stdout, stderr = out.communicate()
cost = float(stdout) * 1000
return cost
with open(url_list) as f:
for url in f.read().split("\n"):
if url:
print "%s %s" %(url, get_cost(url))
这里我们需要定义1个url列表: urls.txt。
http://www.itest.info/
http://www.itest.info/courses/9
http://www.itest.info/courses/7
http://www.itest.info/courses/2
http://www.itest.info/courses/6
http://www.itest.info/newclass
运行
python curl_tool.py urls.txt
结果
http://www.itest.info/ 80.16
http://www.itest.info/courses/9 40.153
http://www.itest.info/courses/7 54.118
http://www.itest.info/courses/2 56.205
http://www.itest.info/courses/6 47.896
http://www.itest.info/newclass 78.962
统计
支持了一次请求多个接口以后,我们需要对耗时进行排序,找出最耗时的那个页面和接口。
python curl_tool.py urls.txt | sort -k 2 -r
我们用sort命令对第2列进行排序,结果如下
http://www.itest.info/courses/2 49.519
http://www.itest.info/newclass 44.716
http://www.itest.info/courses/7 43.408
http://www.itest.info/ 43.052
http://www.itest.info/courses/9 42.869
http://www.itest.info/courses/6 38.722
持续运行
我们希望每天晚上都运行1次统计脚本。
这时候可以使用crontab。
30 2 * * * python curl_tool.py urls.txt | sort -k 2 -r >/res.txt 2>&1
这样每天早上2:30 am的时候我们就会运行统计脚本,把接口存储在res.txt中。
持续统计
为了可以统计一段时间内的请求耗时,我们可以把每天的结果落地到es里。这里就不展开了。
讨论
- 有mac/linux的同学可以亲自尝试一下
- python脚本基于python2,python3没试过
- 不错的知识广度和代码能力可以让你迅速的实现简单的测试工具
- 大道至简
使用curl创建简单的性能监控工具的更多相关文章
- 你值得拥有:25个Linux性能监控工具
一.基于命令行的性能监控工具 1.dstat - 多类型资源统计工具 该命令整合了vmstat,iostat和ifstat三种命令.同时增加了新的特性和功能可以让你能及时看到各种的资源使用情况,从而能 ...
- 25个Linux性能监控工具
一段时间以来,我们在网上向读者介绍了如何为Linux以及类Linux操作系统配置多种不同的性能监控工具.在这篇文章中我们将罗列一系列使用最频繁的性能监控工具,并对介绍到的每一个工具提供了相应的简介链接 ...
- Linux性能监控工具收集(转)
一.基于命令行的性能监控工具 1.dstat - 多类型资源统计工具 该命令整合了vmstat,iostat和ifstat三种命令.同时增加了新的特性和功能可以让你能及时看到各种的资源使用情况,从而能 ...
- 五大最佳开源java性能监控工具
如果你正在寻找性能监控工具,不妨看看以下推荐的这五款开源工具,这些工具目前已经可以替代付费工具了,你可以看看是否是你的最佳选择.本文推荐的五款开源工具目前是开源社区中最受欢迎的. 1. Stagemo ...
- Spotlight性能监控工具的配置及使用
这是我离线整理资料里的内容,大概是2012年时候开始使用此性能监控工具的,直到至今,接触到几个性能监控工具里,还是美国quest公司生产的Spotlight此产品相对比较牛! 我也不知道现在发展到能支 ...
- SkyWalking分布式系统应用程序性能监控工具-上
概述 微服务系统监控三要素 现在系统基本都是微服务架构,对于复杂微服务链路调用如下问题如何解决? 一个请求经过了这些服务后其中出现了一个调用失败的问题,如何定位问题发生的地方? 如何计算每个节点访问流 ...
- 深入理解JVM—性能监控工具
(转自:http://yhjhappy234.blog.163.com/blog/static/31632832201222691738865/) 我们知道,在JVM编译期和加载器,甚至运行期已经做了 ...
- (转载)Java自带的GUI性能监控工具Jconsole以及JisualVM简介
原文链接:http://blog.csdn.net/chendc201/article/details/22905503 1 Jconsole 1.1 简介以及连接 JConsole是一个基于JMX的 ...
- 深入理解JVM(七)——性能监控工具
前言 工欲善其事必先利其器,性能优化和故障排查在我们大都数人眼里是件比较棘手的事情,一是需要具备一定的原理知识作为基础,二是需要掌握排查问题和解决问题的流程.方法.本文就将介绍利用性能监控工具,帮助开 ...
随机推荐
- RocketMQ ACL使用指南
目录 1.什么是ACL? 2.ACL基本流程图 3.如何配置ACL 3.1 acl配置文件 3.2 RocketMQ ACL权限可选值 3.3.权限验证流程 4.使用示例 4.1 Broker端安装 ...
- JVM原理速记复习Java虚拟机总结思维导图面试必备
良心制作,右键另存为保存 喜欢可以点个赞哦 Java虚拟机 一.运行时数据区域 线程私有 程序计数器 记录正在执行的虚拟机字节码指令的地址(如果正在执行的是Native方法则为空),是唯一一个没有规定 ...
- variable precision SWAR算法
计算二进制形式中1的数量这种问题,在各种刷题网站上比较常见,以往都是选择最笨的遍历方法“蒙混”过关.在了解Redis的过程中接触到了variable precision SWAR算法(以下简称VP-S ...
- 使用Jquery获取指定属性的值
使用Jquery获取指定属性的值 <input type="hidden" value="{$time}" name="time" i ...
- lqb 基础练习 杨辉三角形
基础练习 杨辉三角形 时间限制:1.0s 内存限制:256.0MB 问题描述 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数. 它的一个重要性质是:三角形中的 ...
- HTML5之worker开启JS多线程模式及window.postMessage跨域
worker概述 worker基本使用 window下的postMessage worker多线程的应用 一.worker概述 web worker实际上是开启js异步执行的一种方式.在html5之前 ...
- thinking in JAVA 编译记录
编辑/编译<thinking in JAVA>源代码 一.下载源代码 首先,我阅读的是<thinking in JAVA>第四版,因此按照书中提供的链接找到了mindview主 ...
- vue中动态加载img
想实现动态加载图片,当点击“首页”时,图片变色 代码如下: <mt-tabbar v-model="selected" fixed class="border-1p ...
- 根据json数据中某一个属性 处理数组重组的方法 (二种)
需求:根据role 的不同分组 渲染页面 进行后期操作 后台返回数据: 因为后台返回的json数据不是我们想要的 所以就得自己来了~ 要啥样整啥样 js: 第一种处理方法 使用方法: 1: th ...
- vue学习笔记(七)组件
前言 在前面vue的一些博客中,我们几乎将vue的基础差不多学习完了,而从本篇博客开始将会进入到vue的另一个阶段性学习,本篇博客的内容在以后的vue项目中占很大的比重,所以小伙伴们需要认真学习,本篇 ...