本次压力测试的目的:

a. 查看单个squid  的在大量的url 访问时 Cache 命中率

b. 在此过程中,查看squid 的平均响应时间

c.  查看  cpu mem io 的瓶颈

  1. http_load 的配置安装, 网上很多,这里就不多话了

  2. 在一台服务器上搭建一个回源webservice (这里用apache  要记得设置cache-control),将 域名 cdnxxx.com指向该台服务器的IP

  3. 在cdnxxx.com的根目录 生成大量测试的小图片(因为主要是测试cache、热点命中率,所以图片一般小于35KB),准备20个jpg 小图片 放到src文件夹中,将src  拷贝到cdnxxx.com的根目录,在根目录创建0文件夹(mkdir 0)

       a. 生成代码,用python写的,先在0这个目录下生成6000个jpg图片

'''
Created on 2013-7-16
 
@author: xie
'''
 
#!/usr/bin/python
import string, random, os
 
# create uri
def UriTotal():
    uri_total = 6000
    dir_total = 20
    uri_number = 1
    dir_number = 0
     
    while uri_number < uri_total:
            os.system("cp ./src/" + str(uri_number%20)  + ".jpg ./0/" + str(uri_number) + ".jpg")
            uri_number += 1
 
if __name__ == '__main__':
    UriTotal()

    b.  在生成6000个文件夹

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/python
import string, random, os
 
# create uri
dir_total = 5999
uri_number = 1
dir_number = 1
 
while dir_number < dir_total:
        os.system("/bin/ln -s ./0/ " + str(dir_number)  )
        dir_number += 1

4. 在你准备http_load 测试的那台服务器 执行一下脚本,生成 6000 * 6000个url

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# -*- coding: utf-8 -*-
'''
Created on 2013-7-17
 
@author: xie
'''
 
def write2(filename, lines):
        try:
            f = open(filename, 'w')
        except IOError:
            raise Exception('error open ' + filename)
 
        f.write('\n'.join(lines))
        f.close()
 
if __name__ == '__main__':
    # 从 0-5999
    dir_total = 6000
    # 从 1-5999
    file_total = 6000
    f = open('ab.txt''w')
    for in range(0, dir_total):
        for in range(1,file_total):
            f.write('http://cdnxx.com/'+ str(i)+'/' + str(j)+'.jpg\n')
 
    f.close()

5. 在指定服务器搭建squid(可以参考我之前的配置,这里不需要haproxy,直接对单个squid进行压力测试)

  1. 这里注意squid 有好几个模式,不用ha  代理的时候,针对80端口测试,需要把squid 的模式设置为http_port 80 transparent

  2. 在acl  中配置一个频道用来做测试 cdnxxx.com

  3. 启动squid

6. 在这台测试机上,绑定cdnxxx.com 的ip , ip为对外提供服务的squid那台服务器的IP

wget -c http://soft.kwx.gd/tools/http_load-12mar2006.tar.gz
yum -y install gcc gcc-c++            #安装GCC编辑器
tar xzvf http_load-12mar2006.tar.gz   #解压http_load压缩包
cd http_load-12mar2006                #进入http_load目录
mkdir /usr/local/man                  #创建目录
make && make install                  #编译并安装

/maichuang/ab/http_load/http_load -parallel 1000 -fetches 10000 /maichuang/ab/ab.txt >> /maichuang/ab.result.txt

7. 对squid 进行预加载

# -*- coding: utf-8 -*-
'''
Created on 2013-7-4
 
@author: xie
'''
 
import socket,re,pycurl,urllib
 
class CurlM(object):
     
    def __init__(self, urls):
        self._urls = urls
        self.m = pycurl.CurlMulti()
        self.m.handles = []
        self.Init()
     
    def run(self): #说明该curl集 已经运行完成,可以删除此类
        flag = False
        while 1:
            if flag:
                break
            while 1:
                if self.m is None or len(self.m.handles) <= 0:
                    self.close()
                    flag = True
                    break
                ret, num_handles = self.m.perform()
                if ret == pycurl.E_CALL_MULTI_PERFORM:
                    break
                if num_handles <= 0:
                    self.close()
                    flag = True
                    break
                ret = self.m.select(0.01)
                break
    def write(self,buff):
        pass
     
    def Init(self):
        for url in self._urls:
            if url is None:
                continue
            c = pycurl.Curl()
            c.setopt(pycurl.URL, str(url))
            c.setopt(pycurl.CONNECTTIMEOUT, 10)#链接超时  
            c.setopt(pycurl.WRITEFUNCTION, self.write)#写(下载)回传函数,传递一个写指针供外部操作, 一次回调内容大小在
            c.setopt(pycurl.TIMEOUT, 10)#下载超时
            c.setopt(pycurl.PROXY, '127.0.0.1:80')# 使用代理
            self.m.handles.append(c)
            self.m.add_handle(c)
             
    def close(self):
        for in self.m.handles:
            if is not None:
                c.close()
        if self.m is not None:
            self.m.close()
        self.m = None
        self._caches = []
        self._urls = []
 
 
if __name__ == '__main__':
    xie = []
    for in xrange(0,1000):
        for in xrange(1,1000):
            xie.append('http://cdnxxx.com/'+str(i)+ '/'+str(x)+'.jpg')
    c = CurlM(xie)
    c.run()

8. 查看squid 的信息

/maichuang/squid/bin/squidclient -p 80 mgr:info

9. http_load 的返回结果 可以看见每秒响应请求次数,服务器响应的平均时间

测试结果

#100000个请求,最大并发数1000,总计传输的数据为2.73427e+09bytes,运行时间362.318秒。关注点:总请求数、最大并发进程数

100000 fetches, 1000 max parallel, 2.73427e+09 bytes, in 362.318 seconds

#每一连接平均传输的数据量2.73427e+09/100000=27342.7

27342.7 mean bytes/connection

#每秒的响应请求为276,每秒传递的数据为7.5466e+06btyes/sec,关注点:每秒的响应请求数(对应LR中的每秒响应用户数)
276 fetches/sec, 7.5466e+06 bytes/sec

#每次连接的平均响应时间是136.121 msecs,最大响应时间1236.32 msecs,最小响应时间62.531 msecs。关注点:每个连接的平均响应时间(对应QTP中的response time,每连接响应用户时间 )
msecs/connect: 136.121 mean, 1236.32 max, 62.531 min
msecs/first-response: 491.341 mean, 59717.1 max, 62.605 min
2916 timeouts
1192 bad byte counts
HTTP response codes:
  code 200 -- 99780

测试结果中主要的指标是 fetches/sec、msecs/connect 这个选项,即服务器每秒能够响应的查询次数, 
用这个指标来衡量性能。似乎比 apache的ab准确率要高一些,也更有说服力一些。 Qpt-每秒响应用户数和response time,每连接响应用户时间。 
测试的结果主要也是看这两个值。当然仅有这两个指标并不能完成对性能的分析,我们还需要对服务器的 cpu、men进行分析,才能得出结论

http_load 对squid 进行压力测试相关推荐

  1. Linux下四款Web服务器压力测试工具(http_load、webbench、ab、siege)介绍

    一.http_load程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会 ...

  2. Web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程

    一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工 具,它可以以一个单一的进程运行,一般 ...

  3. Web服务器性能压力测试工具http_load、webbench、ab、Siege使用教程

    Web服务器性能压力测试工具http_load.webbench.ab.Siege使用教程 作者: feng 日期: 2012/07/25 发表评论 (0) 查看评论 一.http_load 程序非常 ...

  4. 服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程

    一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工 具,它可以以一个单一的进程运行,一般 ...

  5. 软件压力测试linux服务器,使用http_load来给Linux系统的服务器做压力测试

    介绍个http_load压力测试工具,http_load,类似的工具还有webbench.ab.Siege. 1.下载 官方网站:http://acme.com/software/http_load/ ...

  6. 三种web性能压力测试工具http_load webbench apache benc

    题记:压力和性能测试工具很多,下文讨论的是我觉得比较容易上手,用的比较多的三种 http_load 下载地址:http://www.acme.com/software/http_load/http_l ...

  7. 十个免费的WEB压力测试工具

    两天,jnj在本站发布了<如何在低速率网络中测试 Web 应用>,那是测试网络不好的情况.而下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的W ...

  8. http压力测试工具

    HTTP 压力测试工具 一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工 具,它可以以 ...

  9. apache ab压力测试学习

    转载自  https://segmentfault.com/a/1190000012765485 1.介绍 网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环.只有让服务器处在高压情况下,才能 ...

最新文章

  1. 《精通自动化测试框架设计》—第1章 1.3节五天太久,还能压缩吗
  2. CNN回应中方谴责 否认冒犯中国人
  3. mysql 连接 优化_(一)MySQL 连接优化
  4. leetcode 35 Search Insert Position(二分法)
  5. 使用SQLite3存储和读取数据
  6. SAP UI5 日期类型 sap.ui.model.type.Date 的解析格式问题分析
  7. 用php编写xml,PHP 读取和编写 XML
  8. webpack转内联px为rem_Vuejs项目配置webpack将px自动转化为rem,适配移动端
  9. java 64内存不足_window7 64bit解决tomcat内存不足问题
  10. 错误: 编码GBK的不可映射字符 - Android Studio 生成javadoc文档时报错
  11. c语言程序设计怎么改卷,C语言程序设计(B卷)教程.doc
  12. 32位电脑适合装W ndows10,32位再见?微软将停止支持32位Win10系统
  13. 好用的小工具系列之---lombok--扔掉傻瓜式书写,精简你的代码,节约你的时间
  14. 018-双因素理论|如何管理80后,90后
  15. 使用usb串口线作为console
  16. vue实现浏览器桌面通知
  17. python常用语音识别库_python语音识别
  18. Notepad++ 一键格式化php代码
  19. 电路中IC器件电压符号的解释
  20. 虚拟化技术(2)系统虚拟化

热门文章

  1. 360和QQ,拿什么来拯救你?
  2. 总结前端三剑客之一(HTML基础)
  3. Android AlarmManager
  4. 用c语言编写研究生录取程序,C语言_课程设计---研究生初试录取管理系统.doc
  5. postgresql 表文件介绍
  6. 树莓派4B突然连不上手机热点问题解决
  7. 你只管努力,剩下的交给时光---一个南方姑娘的2016北漂之旅
  8. 导出远程oracle数据库到本地【亲测有效】
  9. Open3d之计算点云边界框
  10. ionic android 闪退,ionic 插件Image Picker 安卓闪退问题