【原】Nginx添加Content-MD5头部压测分析
如需转载,必须注明原文地址,请尊重作者劳动成果。 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头部压测分析的更多相关文章
- 软件性能测试分析与调优实践之路-JMeter对RPC服务的性能压测分析与调优-手稿节选
一.JMeter 如何通过自定义Sample来压测RPC服务 RPC(Remote Procedure Call)俗称远程过程调用,是常用的一种高效的服务调用方式,也是性能压测时经常遇到的一种服务调用 ...
- RocketMQ性能压测分析(转载)
一 机器部署 1.1 机器组成 1台nameserver 1台broker 异步刷盘 2台producer 2台consumer 1.2 硬件配置 CPU 两颗x86_64cpu,每颗 ...
- RocketMQ性能压测分析(转)
原创文章,转载请注明出处:http://jameswxx.iteye.com/blog/2093785 一 机器部署 1.1 机器组成 1台nameserver 1台broker 异步刷盘 2 ...
- 压测 502 日志报错 upstream timed out (110: Connection timed out)
环境介绍 服务器:centos6.5服务:nginx proxy 问题描述: 压测 开发同事 的开发环境项目没事,但是 线上机器 命中%50 ,大量502 php的某些页面打不开,页面提示gatewa ...
- CentOS 相关软件安装 与 Siege压测
1.登录linux机器 a.打开mac的钥匙串 b.ssl root@ip c.输入密码 常用命令: cat /proc/version 查看系统版本 cat /etc/issue control ...
- jmeter关联、下载文件、简单压测
关联 一.什么是关联 关联是请求与请求之间存在数据依赖关系,需要从上一个请求获取下一个请求需要回传回去的数据. 简单地说就是在测试过程中有些数据的值会经常发生变化,要获取并使用这些数据,把这个动态的信 ...
- Jmeter与压测相关概念
相关概念 RT(response time) 什么是RT? RT就是指系统在接收到请求和做出相应这段时间跨度 但是值得一提的是RT的值越高,并不真的就能说明我们的系统的吞吐量就很高, 比如说,如果存在 ...
- HTTP 压测工具wrk简介
前段时间项目压测,看到开发命令行下使用这个命令进行压测非常简洁.方便,萌发了学习的兴趣,这里仅做简单介绍. 安装 wrk支持大多数UNIX系统,不支持Windows.需要操作系统支持LuaJIT和Op ...
- 压测工具ab的简单使用
apache benchmark(ab)是一种常见的压测工具,不仅可以对apache进行压测,也可以对nginx,tomcat,IIS等进行压测 安装 如果安装了apache,那么ab已经自带了,不需 ...
随机推荐
- dubbo 解决Multicast java.net.SocketException: No such device
log4j:WARN No appenders could be found for logger (com.alibaba.dubbo.common.logger.LoggerFactory). l ...
- HDP2.4安装(二):Centos7配置
Centos7 Minimal Install 安装完成后是不支持上网的,并且大部分常用的软件也未安装,首先要解决的问题就是网络配置.当网络配通后,即可通过Xshell或其它工具来远程进行操作与管理, ...
- [mysql] mysql 5.6.X 慢查询日志
慢查询日志 一篇好文章,学习保存.... 打开慢查询日志 慢查询日志,顾名思义就是记录执行比较慢查询的日志. 查看是否开启慢查询日志: show variables like '%slow%'; 打开 ...
- JABX简单介绍
主要引至http://suo.iteye.com/blog/1233458 一.简介 1.概念是什么:(Java Architecture for XML Binding) 是一个业界的标准,是一项可 ...
- javascript 定义正则表达式
js中定义正则表达式有两种,使用RegExp和使用字面量. 使用字面量定义时需要注意:必须以/开始,以/结束,就像定义字符串一样("test"). 但是,js的正则表达式可以通过指 ...
- 【Andorid开发框架学习】之Mina开发之客户端开发
昨天我们讲到了Mina的基本知识点.如果还有不懂得同学可以看一下我昨天的博客.http://www.cnblogs.com/getherBlog/p/3934927.html今天我着重来讲一下基于Mi ...
- Js闭包函数
一.变量的作用域要理解闭包,首先必须理解Javascript特殊的变量作用域.变量的作用域无非就是两种:全局变量和局部变量.Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. ( ...
- [系统集成] CI持续集成项目简介
一.问题的产生 公司的多个部门围绕着产品开发.测试.发布.维护,设置有不同的岗位和系统,这些岗位和系统缺少有效的整合,没有实现自动化,效率不是很高,因此就有了CI(持续集成)的项目需求. 二.解决方案 ...
- ajax实现--技术细节详解
ajax原理和XmlHttpRequest对象 Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面.这其 ...
- 使用 Entity Framework
ORM 和 EF 当我们要开发一个应用程序,就要考虑怎样展示数据,怎样持久化数据.考虑这个问题时我们所要关心的东西,最重要的莫过于程序的性能.开发的简易性和代码的可维护.可扩展性. 持久化(Persi ...