如需转载,必须注明原文地址,请尊重作者劳动成果。 http://www.cnblogs.com/lyongerr/p/5048464.html

本文介绍了webbenck安装,但是最后使用的是ab工具进行压测,安装apache以后,就自带了ab工具。

1 webbench工具安装

1.1 简介

Webbench是知名的网站压力测试工具,它是由Lionbridge公司(http://www.lionbridge.com)开发。Webbench能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。webbench的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数和每秒钟传输数据量。webbench不但能具有便准静态页面的测试能力,还能对动态页面(ASP,PHP,JAVA,CGI)进 行测试的能力。还有就是他支持对含有SSL的安全网站例如电子商务网站进行静态或动态的性能测试。Webbench最多可以模拟3万个并发连接去测试网站的负载能力。

1.2 安装

#wget http://home.tiscali.cz/~cz210552/webbench.html/webbench-1.5.tar.gz

#tar zxvf webbench-1.5.tar.gz

#cd webbench-1.5

#make

#make install

1.3 webbench使用

webbench -c 1000 -t 60 http://test.my4399.com/download/md5.html

webbench -c 并发数 -t 运行测试时间 URL

2 nginx添加file-md5模块

2.1 简介

HTTP协议新增了Content-MD5 HTTP头,但是nginx并不支持这个功能,而且官方也明确表示不会增加这项功能,为什么呢?因为每次请求都需要读取整个文件来计算MD5值,以性能著称的nginx绝对不愿意干出违背软件宗旨的事情。但是有些应用中,需要验证文件的正确性,有些人通过下载当前文件,然后计算MD5值来比对当前文件是否正确。不仅仅浪费带宽资源也浪费了大把的时间。有需求就有解决方案,网友开发了file-md5模块。

2.2 下载file-md5模块

#cd /usr/local/src

# wget https://github.com/cfsego/file-md5/archive/master.zip -O file-md5-master.zip

# unzip file-md5-master.zip

2.3 下载nginx-1.4.2

# wget http://nginx.org/download/nginx-1.4.2.tar.gz

# tar -xzf nginx-1.4.2.tar.gz

# cd nginx-1.4.2

2.4 下载pcre-8.38.tar.gz

tar xvf pcre-8.38.tar.gz -C /usr/local/src/

2.5 编译file-md5模块

#./configure --prefix=/usr/local/nginx-1.4.2 --add-module=../file-md5-master --with-pcre=../pcre-8.38/ --with-openssl=/usr/include

#make

#make install

2.6 配置vhost文件

server {

listen 80;

server_name test.my4399.com;

root /data/web/test;

# for add content-md5 to http header

location ~ /download

{

add_header Content-MD5 $file_md5;

}

}

2.7 启动nginx

#cd /usr/local/nginx-1.4.2

#./sbin/nginx -c conf/nginx.conf

2.8 测试Content-MD5功能

3 nginx添加perl模块

https://gist.github.com/sivel/1870822

3.1 准备perl模块相关文件

#cd /usr/local/nginx-1.4.2/

将以下ContentMD5.pm文件存放于/usr/local/nginx-1.4.2/perl/lib/下,文件名必须是ContentMD5.pm

# nginx Embedded Perl module for adding a Content-MD5 HTTP header

#

# This perl module, will output an MD5 of a requested file using the

# Content-MD5 HTTP header, by either pulling it from a file of the

# same name with .md5 appended to the end, if it exists, or will

# calculate the MD5 hex hash on the fly

#

# Author: Matt Martz <matt@sivel.net>

# Link: https://gist.github.com/1870822#file_content_md5.pm

# License: http://www.nginx.org/LICENSE

package ContentMD5;

use nginx;

use Digest::MD5;

sub handler {

my $r = shift;

my $filename = $r->filename;

return DECLINED unless -f $filename;

my $content_length = -s $filename;

my $md5;

if ( -f "$filename.md5" ) {

open( MD5FILE, "$filename.md5" ) or return DECLINED;

$md5 = <MD5FILE>;

close( MD5FILE );

$md5 =~ s/^\s+//;

$md5 =~ s/\s+$//;

$md5 =~ s/\ .*//;

} else {

open( FILE, $filename ) or return DECLINED;

my $ctx = Digest::MD5->new;

$ctx->addfile( *FILE );

$md5 = $ctx->hexdigest;

close( FILE );

}

$r->header_out( "Content-MD5", $md5 ) unless ! $md5;

return DECLINED;

}

1;

3.2 编译

#cd /usr/local/src/nginx-1.4.2

# ./configure --prefix=/usr/local/nginx-1.4.2 --with-pcre=../pcre-8.38/ --with-openssl=/usr/include --with-http_stub_status_module --with-http_perl_module --with-http_addition_module --with-http_realip_module --with-http_sub_module

#make

#make install

3.3 编辑nginx.conf

在http字段里面添加

perl_modules perl/lib;

perl_require ContentMD5.pm;

3.4 编辑vhost

server {

listen 80;

server_name test.my4399.com;

root /data/web/test;

location /download {

perl ContentMD5::handler;

}

}

3.5 启动nginx

#chown www.www /usr/local/nginx-1.4.2 -R

#cd /usr/local/nginx-1.4.2

#./sbin/nginx -c conf/nginx.conf

3.6 测试Content-MD5功能

4 压测分析

测试文件的大小均为同一文件,15M。基于同一文件,均使用ab工具共请求1000次,每次1000并发。

4.1 使用file-md5模块

ab -n 1000 -c 1000 http://test.my4399.com/download/test.html

4.2 使用perl模块

ab -n 1000 -c 1000 http://test.my4399.com/download/test.html

4.3 数据统计

4.3.1 file-md5

ab -n 1000 -c 1000 http://test.my4399.com/download/test.html

指标

第一次

第二次

第三次

第四次

第五次

第六次

平均值

Failed requests

0

0

1

1

1

0

0.5

longest request

145177ms

132901ms

139602ms

129589ms

137383ms

133433ms

136347.5ms

ab -n 200 -c 200 http://test.my4399.com/download/test.html

指标

第一次

第二次

第三次

第四次

第五次

第六次

平均值

Failed requests

0

0

0

0

0

0

0

longest request

24757ms

23835ms

24284ms

24207ms

24380ms

24837ms

24383.3ms

4.3.2 perl模块

ab -n 1000 -c 1000 http://test.my4399.com/download/test.html

指标

第一次

第二次

第三次

第四次

第五次

第六次

平均值

Failed requests

0

0

0

1

78

1

 

longest request

160995ms

158246ms

158178ms

168085ms

154494ms

163422ms

160570ms

ab -n 200 -c 200 http://test.my4399.com/download/test.html

指标

第一次

第二次

第三次

第四次

第五次

第六次

平均值

Failed requests

0

0

0

0

0

0

0

longest request

31651ms

33463ms

30368ms

29941ms

29749ms

29430ms

30767ms

从上图可以看出,logest request time 相差 6383.7ms,也就是6秒多。

5 参考资料

http://www.ttlsa.com/nginx/nginx-modules-ngx_file_md5

https://gist.github.com/sivel/1870822

【原】Nginx添加Content-MD5头部压测分析的更多相关文章

  1. 软件性能测试分析与调优实践之路-JMeter对RPC服务的性能压测分析与调优-手稿节选

    一.JMeter 如何通过自定义Sample来压测RPC服务 RPC(Remote Procedure Call)俗称远程过程调用,是常用的一种高效的服务调用方式,也是性能压测时经常遇到的一种服务调用 ...

  2. RocketMQ性能压测分析(转载)

    一   机器部署 1.1  机器组成 1台nameserver 1台broker  异步刷盘 2台producer 2台consumer   1.2  硬件配置 CPU  两颗x86_64cpu,每颗 ...

  3. RocketMQ性能压测分析(转)

    原创文章,转载请注明出处:http://jameswxx.iteye.com/blog/2093785 一   机器部署 1.1  机器组成 1台nameserver 1台broker  异步刷盘 2 ...

  4. 压测 502 日志报错 upstream timed out (110: Connection timed out)

    环境介绍 服务器:centos6.5服务:nginx proxy 问题描述: 压测 开发同事 的开发环境项目没事,但是 线上机器 命中%50 ,大量502 php的某些页面打不开,页面提示gatewa ...

  5. CentOS 相关软件安装 与 Siege压测

    1.登录linux机器 a.打开mac的钥匙串 b.ssl root@ip c.输入密码 常用命令: cat /proc/version  查看系统版本 cat /etc/issue control ...

  6. jmeter关联、下载文件、简单压测

    关联 一.什么是关联 关联是请求与请求之间存在数据依赖关系,需要从上一个请求获取下一个请求需要回传回去的数据. 简单地说就是在测试过程中有些数据的值会经常发生变化,要获取并使用这些数据,把这个动态的信 ...

  7. Jmeter与压测相关概念

    相关概念 RT(response time) 什么是RT? RT就是指系统在接收到请求和做出相应这段时间跨度 但是值得一提的是RT的值越高,并不真的就能说明我们的系统的吞吐量就很高, 比如说,如果存在 ...

  8. HTTP 压测工具wrk简介

    前段时间项目压测,看到开发命令行下使用这个命令进行压测非常简洁.方便,萌发了学习的兴趣,这里仅做简单介绍. 安装 wrk支持大多数UNIX系统,不支持Windows.需要操作系统支持LuaJIT和Op ...

  9. 压测工具ab的简单使用

    apache benchmark(ab)是一种常见的压测工具,不仅可以对apache进行压测,也可以对nginx,tomcat,IIS等进行压测 安装 如果安装了apache,那么ab已经自带了,不需 ...

随机推荐

  1. Tengine:基于Nginx的衍生版

    engine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验 ...

  2. selenium+python自动化之登录案例

    一.登录 1.先打开浏览器 2.打开论坛主页:http://www.hordehome.com/ 3.查找元素之前可以先设置元素等待:implicitly_wait() 4.点登录按钮,弹出登录框 5 ...

  3. NET 2.0 OCR文字识别技术(Tesseract 引擎)[转]

    一.OCR简介  参见http://baike.baidu.com/view/17761.htm?fr=ala0_1  大家参照,我第一次也是这么了解的,呵呵.高手见笑 现在市面上好多OCR 引擎,不 ...

  4. TP控制器(Controller)

    控制器的一些方法: Maincontroller.class.php文件: <?php namespace Home\Controller; use Think\Controller; clas ...

  5. 使用Servlet Filter做Login checking

    1) 建一个Login Servlet: Login.java package com.my; import java.io.*; import javax.servlet.*; import jav ...

  6. 静态库不要strip 太厉害

    根据strip的功能表示,strip经常用来去除目标文件中的一些符号表.调试符号表信息,减少包的大小.我自己做了一函数库,同样的代码生成了一个mylib.so和一个mylib.a文件,之后使用了 st ...

  7. 我的Android最佳实践之—— 解决闪空界面问题

    进入应用时,由于应用的启动Activity都会有默认的theme,所以会跳一下原始界面,才启动我们定义的theme. 修改这个问题的方法,就是给应用启动的Activity设置一个空的theme.如下面 ...

  8. extern 修饰符

    extern(C# 参考) extern 修饰符用于声明在外部实现的方法. extern 修饰符的常见用法是在使用 Interop 服务调入非托管代码时与 DllImport 特性一起使用.在这种情况 ...

  9. 黄聪:wordpress/wp-admin目录文件

    wp-admin/admin.php:管理文件的核心文件.用来连接数据库,整合动态菜单数据,显示非核心控制页面等. wp-admin/admin-db.php wp-admin/admin-foote ...

  10. 如何获取客户端IP、操作系统、浏览器

    request.getRemoteAddr();//获取IP request.getHeader("User-Agent");//获取操作系统信息.浏览器信息. protected ...