[置顶] pycurl检测网站性能,pycurl.*_TIME时间问题
今天使用python+pycurl来检测网站性能,使用curl_obj.getinfo(pycurl.*_TIME)来获取各个阶段运行时间
- total_time = curl_obj.getinfo(pycurl.TOTAL_TIME)
- #传输结束所消耗的总时间
- dns_time = curl_obj.getinfo(pycurl.NAMELOOKUP_TIME)
- #从发起请求到DNS解析完成所消耗的时间
- connect_time = curl_obj.getinfo(pycurl.CONNECT_TIME)
- #从发起请求到建立连接所消耗的时间
- redirect_time = curl_obj.getinfo(pycurl.REDIRECT_TIME)
- #从发起请求到重定向所消耗的时间
- ssl_time = curl_obj.getinfo(pycurl.APPCONNECT_TIME)
- #从发起请求到SSL建立握手时间
- pretrans_time = curl_obj.getinfo(pycurl.PRETRANSFER_TIME)
- #从发起请求到准备传输所消耗的时间
- starttrans_time = curl_obj.getinfo(pycurl.STARTTRANSFER_TIME)
- #从发起请求到接收第一个字节的时间
最后发现,dns_time+connect_time+......+starttrans_time远远大于total_time。
查看man curl(pycurl基于curl开发的),发现各个阶段时间是从客户端发起URL请求时到某个阶段的时间差,而不是某个阶段开始时间到结束时间差。
为了求得某个阶段的执行时间,需要对这些值进行计算。
pycurl的各个阶段(根据pycurl.*_TIME统计)依次为
DNS解析-->TCP连接-->跳转【如有】-->SSL握手【如有】-->客户端准备-->服务器响应-->数据传输
代码如下:
- #! /usr/bin/python
- #coding:utf-8
- #-*- coding : utf-8 -*-
- import sys,pycurl
- request_url = sys.argv[1]
- curl_obj = pycurl.Curl()
- #创建一个curl对象
- curl_obj.setopt(pycurl.CONNECTTIMEOUT, 5)
- #连接的等待时间,设置为0则不等待
- curl_obj.setopt(pycurl.TIMEOUT, 5)
- #最大下載时间
- curl_obj.setopt(pycurl.NOPROGRESS, 1)
- #是否屏蔽下载进度条,非0则屏蔽
- curl_obj.setopt(pycurl.MAXREDIRS, 0)
- #指定HTTP重定向的最大数
- curl_obj.setopt(pycurl.FORBID_REUSE, 1)
- #完成交互后强制断开连接,不重用
- curl_obj.setopt(pycurl.FRESH_CONNECT,1)
- #强制获取新的连接,即替代缓存中的连接
- curl_obj.setopt(pycurl.DNS_CACHE_TIMEOUT,1)
- #设置保存DNS信息的时间,默认为120秒
- curl_obj.setopt(pycurl.URL,request_url)
- #指定请求的URL
- import StringIO
- strio = StringIO.StringIO()
- curl_obj.setopt(pycurl.WRITEFUNCTION, strio.write)
- try :
- curl_obj.perform()
- err_mess = ''
- except Exception as e:
- err_mess = str(e)
- #访问页面
- total_time = curl_obj.getinfo(pycurl.TOTAL_TIME)
- #传输结束所消耗的总时间
- dns_time = curl_obj.getinfo(pycurl.NAMELOOKUP_TIME)
- #从发起请求到DNS解析完成所消耗的时间
- connect_time = curl_obj.getinfo(pycurl.CONNECT_TIME)
- #从发起请求到建立连接所消耗的时间
- redirect_time = curl_obj.getinfo(pycurl.REDIRECT_TIME)
- #从发起请求到重定向所消耗的时间
- ssl_time = curl_obj.getinfo(pycurl.APPCONNECT_TIME)
- #从发起请求到SSL建立握手时间
- pretrans_time = curl_obj.getinfo(pycurl.PRETRANSFER_TIME)
- #从发起请求到准备传输所消耗的时间
- starttrans_time = curl_obj.getinfo(pycurl.STARTTRANSFER_TIME)
- #从发起请求到接收第一个字节的时间
- print '发起请求到DNS解析时间 : %.3f ms' %(dns_time*1000)
- print '发起请求到TCP连接完成时间: %.3f ms' %(connect_time*1000)
- print '发起请求到跳转完成时间: %.3f ms' %(redirect_time*1000)
- print '发起请求到SSL建立完成时间 : %.3f ms' %(ssl_time*1000)
- print '发起请求到客户端发送请求时间: %.3f ms' %(pretrans_time*1000)
- print '发起请求到客户端接受首包时间: %.3f ms' %(starttrans_time*1000)
- print '总时间为: %.3f ms' %(total_time*1000)
- print ''
- transfer_time = total_time - starttrans_time
- #传输时间
- serverreq_time = starttrans_time - pretrans_time
- #服务器响应时间,包括网络传输时间
- if ssl_time == 0 :
- if redirect_time == 0 :
- clientper_time = pretrans_time - connect_time
- #客户端准备发送数据时间
- redirect_time = 0
- else :
- clientper_time = pretrans_time - redirect_time
- redirect_time = redirect_time - connect_time
- ssl_time = 0
- else :
- clientper_time = pretrans_time - ssl_time
- if redirect_time == 0 :
- ssl_time = ssl_time - connect_time
- redirect_time = 0
- else :
- ssl_time = ssl_time - redirect_time
- redirect_time = redirect_time - connect_time
- connect_time = connect_time - dns_time
- print '发起请求到DNS解析时间 : %.3f ms' %(dns_time*1000)
- print 'TCP连接消耗时间 : %.3f ms' %(connect_time*1000)
- print '跳转消耗时间: %.3f ms' %(redirect_time*1000)
- print 'SSL握手消耗时间 : %.3f ms' %(ssl_time*1000)
- print '客户端发送请求准备时间: %.3f ms' %(clientper_time*1000)
- print '服务器处理时间: %.3f ms' %(serverreq_time*1000)
- print '数据传输时间: %.3f ms' %(transfer_time*1000)
经过多次测试,终于dns_time+connect_time+......+starttrans_time=total_time
[置顶] pycurl检测网站性能,pycurl.*_TIME时间问题的更多相关文章
- [置顶] php检测输入数据是否合法常用的类
<?php class Fun{ function isEmpty($val) { if (!is_string($val)) return false; //是否是字符串类型 if (empt ...
- [置顶] 纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!
前言 FineUI控件库发展至今已经有 5 个年头,目前论坛注册的QQ会员 5000 多人,捐赠用户 500 多人(捐赠用户转化率达到10%以上,在国内开源领域相信这是一个梦幻数字!也足以证明Fine ...
- mysql大于当前时间置顶并按升序排序,小于当前时间的置尾并按降序排序
现在用id来代替时间这样好测试 看一下测试表数据 执行按需求规则排序的sql SELECT * FROM number_generator ORDER BY id < 16 , IF(id &l ...
- YSLOW(一款实用的网站性能检测工具)
概述 YSlow是Yahoo发布的一款基于FireFox的插件,这个插件可以分析网站的页面,并告诉你为了提高网站性能,如何基于某些规则而进行优化. 安装 官网:http://yslow.org/ ...
- [Winform]检测exe是否已经运行,并将其置顶
摘要 在很多pc应用中,基本上都需要有这样的判断,保证在一个终端只运行一个winform的client.并且如果最小化了,用户再次双击桌面图标的时候,将client置顶显示. 解决方案 需要使用win ...
- 基于Yahoo网站性能优化的34条军规及自己的见解
1.尽量减少HTTP请求次数 终端用户响应的时间中,有80%用于下载各项内容,这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数,这是提高网页速 ...
- Yahoo!网站性能最佳体验的34条黄金守则(转载)
1. 尽量减少HTTP请求次数 终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数 ...
- Yahoo!网站性能最佳体验的34条黄金守则
Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践.他们为此进行了一系列的实验.开发了各种工具.写了大量的文章和博客并在各种会议上参与探讨.最佳实践的核心就是 ...
- 网站性能优化(Yahoo 35条)
Yahoo 网站性能优化 35条 一.内容部分 尽量减少 HTTP请求 减少 DNS查找 避免跳转 缓存 Ajxa 推迟加载 提前加载 减少 DOM元素数量 用域名划分页面内容 使 frame数量最少 ...
随机推荐
- Java之OutOfMemoryError简单分析
Java之OutOfMemoryError简单分析 最近编码遇到了Java内存溢出的问题,所以就想顺便总结一下几种导致Java内存溢出的栗子,以及碰到Java内存溢出要如何去解决. Java堆溢出 J ...
- 2、HTML基础总结 part-2
1.表单一 <html> <body> <form> 姓名: <input type="text" name="name&quo ...
- PostgreSQL 配置内存参数
对于任何数据库软件,内存配置项都是很重要的配置项.在 PostgreSQL 主要有以下几个内存配置参数. shared_buffers: integer 类型,设置数据库服务器将使用的共享内存缓冲区数 ...
- python安装pattern失败
做文本分类需要用到pattern.en进行词形还原,安装了一上午都没有成功,mysqlclient安装失败.最后解决办法,pip install --only-binary :all: mysqlcl ...
- 逆向中静态分析工具——IDA初学者笔记
逆向中静态分析工具——IDA初学者笔记 //****************************************************************************** ...
- ionic2 使用slides制作滑动效果的类型选择栏
类似的效果如下图: 1. 生成一个component ionic g component MySlide 2. 在my-slide.html中添加代码: <ion-slides class=&q ...
- codevs 1690 开关灯 线段树区间更新 区间查询Lazy
题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的,六点之后,会有M(2<=m<=100000)个人 ...
- mybatis 从数据库查询的信息不完整解决办法
List<Product> products = productService.getProductListWithPage(productQuery); 今天碰到一个很奇怪的现象,上面的 ...
- EasyUI-Calendar
EasyUI-Calendar 日历篇 Calendar也是页面中经常用到的元素,easyui也为们提供了日历的组件,效果如下图所示: 使用方法如下所示: <div class="ea ...
- 全球主要城市经纬度api
原文发布时间为:2011-06-23 -- 来源于本人的百度文章 [由搬家工具导入] http://www.google.com/ig/cities?country=cn http://www.goo ...