服务器程序压力测试、性能测试

标签: 服务器 程序 压力测试 | 发表时间:2015-07-24 07:14 | 作者:Jerome_s
出处:http://blog.csdn.net
         负载生成器是一些生成用于测试的流量的程序。它们可以向你展示服务器在高负载的情况下的性能,以及让你能够找出服务器可能存在的问题。为了得到更加客观和准确的数值,应该从远程访问、局域网访问和本地等多个方面进行全方位的测试。一般用127.0.0.1进行本机测试

Apache Benchmark
        ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL进行访问,可用来测试Apache的负载压力,也可以测试nginx、lighthttp、IIS等其它Web服务器的压力。
1. 安装
Unix安装
yum install httpd

Windows安装
在安装目录下可以看到ab.exe( cmd 进入到次安装目录C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin)

2. 使用
        为了避免因为网络原因而导致服务器压力测试结果不准确,一般可以用ab -n 100 -c 50 http://127.0.0.1/index.php 来测试自己服务器Web性能。
所有ab命令的组成遵循此结构:   ab [options] [full path to web document] 

ab -n 1000 -c 10  http://www.qq.com/
“-n”表示:每次请求数,默认不能超过1024个,“-c”表示:1个请求的并发连接数,默认最大不能超过50000

响应描述

字段

描述

示 例 值

Concurrency Level

所进行的并发请求总数

1,2,3,…,n,

其中n为任意数字

Time taken for tests

运行所花费的总时间

000.000秒

Complete requests

模拟的请求总数中已

完成的请求总数

1,2,3,…,n,

其中n为任意数字

字段

描述

示 例 值

Failed requests

模拟的请求总数

中失败的请求总数

1,2,3, …,n,

其中n为任意数字

Write errors

使用写入数据时

遇到的错误总数

1,2,3, …,n,

其中n为任意数字

Non-2×× responses

未收到HTTP成功

响应的请求总数(200)

1,2,3,…,n,

其中n为任意数字

Total transferred

整个模拟的响应中

传输的总数据,

大小包括标头数据

725个字节

HTML transferred

整个模拟传输的内容

正文的总大小

137 199个字节

Requests per second

每秒支持的请求总数

5.68 [#/秒]

(平均值)

Time per request

满足一个请求需要

花费的总时间

176.179毫秒

Time per request

满足所有并发请求

中的一个请求需要

花费的总时间

176.179毫秒

Transfer rate

每秒收到的字节总数(KB)

766.27 [KB/秒]


HTML transferred、Requests per second以及Time per request都是关键字段。根据这些数据,我们能大概了解Web服务器的性能水平,这些字段使我们能够大概了解Web服务器为一个请求返回的数据量、Web服务器一秒可以处理的请求总数以及一个请求成功地收到来自Web服务器的响应所花费的总时间
我们的目标是成功降低HTML transferred,提高Requests per second并且降低Time per request值
1、吞吐率(Requests per second)
        服务器并发处理能力的量化描述,单位是reqs/s,指的是在某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
记住:吞吐率是基于并发用户数的。这句话代表了两个含义: 
a、吞吐率和并发用户数相关 
b、不同的并发用户数下,吞吐率一般是不同的 
计算公式:总请求数/处理完成这些请求数所花费的时间,即 
Request per second=Complete requests/Time taken for tests 
必须要说明的是,这个数值表示当前机器的整体性能,值越大越好。 

2、用户平均请求等待时间(Time per request)
计算公式:处理完成所有请求数所花费的时间/(总请求数/并发用户数),即: 
Time per request=Time taken for tests/(Complete requests/Concurrency Level) 

3、服务器平均请求等待时间(Time per request:across all concurrent requests)
计算公式:处理完成所有请求数所花费的时间/总请求数,即: 
Time taken for/testsComplete requests 
可以看到,它是吞吐率的倒数。 
同时,它也等于用户平均请求等待时间/并发用户数,即 
Time per request/Concurrency Level 

        最后一个部分包含一个表,其中包含Connect、Processing、Waiting以及Total字段。这些字段告诉我们请求在每个过程状态中所需的时间。我们最感兴趣的是Total字段及其最大、最小值列。这两列提供响应一个请求所需花费的最长和最短时间的数据

可选标记

标记

描述

-A                  

<username>:<password>

用于提供服务器身份验证信息。

用户名和密码用“:”分隔。

发送的字符串采用base64编码

-c <concurrency 

number>      

一次模拟的请求数。默认情

况下设置为1。数量不得大于n值

-C cookie-name=value

可重复的标记,包含cookie信息

-d

隐藏“percentage served

within XX[ms] table”

标记

描述

-e

要创建的.csv文件的路径。该文件包

含运行的基准测试的结果,该结果分为

两列,即Percentage和Time in ms。建议

采用“gnuplot”文件

-g

要创建的“gnuplot”或TSV文件的路径。

基准测试的输出将保存到该文件中

-h

显示要用于ab的选项列表

-H custom-header

采用字段值对形式发送有效标头和请求

-i

执行HEAD请求,而不是默认的GET请求

-k

启用Keep-Alive功能。允许通过一个

HTTP会话满足多个请求。默认情况下,

该功能处于禁用状态

-n requests

要执行的请求总数

-p POST-file

包含用于HTTP POST请求的数据的

文件路径。内容应该包含由&分隔的键=值对

-P username:password

采用Base64编码的字符串。字符串包含

基本身份验证,以及由“:”分隔的用户名和密码

-q

执行多于100个请求时隐藏进度输出

-s

使用https协议,而非默认的http协议

——不建议这样做

-S

隐藏中位数和标准偏差值

-t timelimit

指定了这个值以后,基准测试的时间

不会超过指定的值。默认情况下无时间限制

-v verbosity-level

数值为2及以上将打印警告和信息;

为3将打印HTTP响应代码;4及以

上将打印标头信息

-V

显示ab工具的版本号

-w

采用HTML表格打印结果

-x <table-attributes>

表示HTML属性的字符串,

使用–w时将放置在<table>标记中

-X proxy[:port]

指定要使用的代理服务器。

代理端口是可选的

-y <tr-attributes>

表示HTML属性的字符串,

使用–w时将放置在<tr>标记中

-z <td-attributes>

表示HTML属性的字符串,

使用–w时将放置在<td>标记中

还可以参考: http://mo2g.com/view/38/ 
 
Webbench:最多模拟3万个并发连接数测试压力 

Webbench最多可以模拟3万个并发连接数来测试服务器压力,可以设置压力测试时间和测试请求的成功率。

1. 安装:

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

tar zxvf webbench-1.5.tar.gz

cd webbench-1.5

make && make install

如报错:执行安装 yum install ctags和yum install gcc,如果有出现没有文件路径错误,执行:mkdir -m 644 -p /usr/local/man/man1


2. 使用

    webbench -c 1000 -t 10 http://www.qq.com/index.php,-c是并发数 -t是运行测试时间,即10秒钟内中以每次100个请求进行测试。

这是运行Webbench测试结果,Speed显示的是每分钟响应请求数和每秒钟传输数据量,Requests显示的是成功请求数和失败请求数。

Webbench运行结果

为准确得到服务器的承受压力,测试时并发数可逐渐加大,如并发100时观察一下网站负载是多少、打开页面是否流畅,当网站打开缓慢时并发是多少、网站打不开时并发又是多少


Tsung: 重型的(heavy-duty)、分布式的、多协议测试工具
它每秒基本可以产生 40,000 个请求,这绝对是我们想要的工具。类似于 Jmeter,你可以把一些行为记录下来在测试时运行,并且可以测试大多数的协议。比如 SSL、HHTP、WebDAV、SOAP、PostgreSQL、MySQL、LDAP 和 Jabber/XMPP。与 Jmeter 不同的是,它没有让人感到迷茫的 GUI 设置,它仅有一个 XML 配置文件,和一些你选择的分布式节点的 SSH 密钥。它的简洁和效率对我的吸引力,完全不亚于它的健壮性和可扩展性。我发现它是一个很强大的工具,在正确的配置下它可以每秒产生百万级的 HTTP 请求。
除此之外,Tsung 还可以在 html 上产生图表以及输入你的测试的详细报告。测试的结果通俗易懂,并且你甚至可以把这些图片展示给你的 boss 看!
在这个系列文章的剩余部分,我还会讲解这个工具。现在你可以继续浏览下面的配置说明,或者直接跳到下一页。
在 CentOS 6.2 上安装 Tsung
1. 首先,你要安装(Erlang 需要的) EPEL 源。因此,在进行下一步之前要把它安装好。安装完后,继续安装你用来产生负载的每个节点需要的包。如果你还没有在节点之间建立无密码 SSH 密钥(passwordless SSH key),那么请建立之。
yum -y install erlang perl perl-RRD-Simple.noarch perl-Log-Log4perl-RRDs.noarch gnuplot perl-Template-Toolkit firefox

2. 从 Github 或者 Tsung 的官网上下载最新的 Tsung。

3. 解压并且编译
tar zxfv  tsung-1.4.2.tar.gz
cd tsung-1.4.2
./configure && make && make install

使用
把示例配置复制到 ~/.tsung 目录里。这是 Tsung 的配置文件和日志文件的存放地方(目录不存在创建即可)
cp  /usr/share/doc/tsung/examples/http_simple.xml /root/.tsung/tsung.xml

你可以根据你的需求去编辑这个配置文件,或者使用我的配置文件。经过大量的尝试以及失败后,我目前的配置文件在使用 7 个分布式节点时可以每秒产生 5 百万个 HTTP 请求。
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<? xml version = "1.0" ?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
< tsung loglevel = "notice" version = "1.0" >
 
< clients >
< client host = "localhost" weight = "1" cpu = "10" maxusers = "40000" >
< ip value = "192.168.122.2" />
</ client >
< client host = "loadnode1" weight = "1" cpu = "9" maxusers = "40000" >
< ip value = "192.168.122.2" />
</ client >
< client host = "loadnode2" weight = "1" maxusers = "40000" cpu = "8" >
< ip value = "192.168.122.3" />
</ client >
< client host = "loadnode3" weight = "1" maxusers = "40000" cpu = "9" >
< ip value = "192.168.122.21" />
</ client >
< client host = "loadnode4" weight = "1" maxusers = "40000" cpu = "9" >
< ip value = "192.168.122.11" />
</ client >
< client host = "loadnode5" weight = "1" maxusers = "40000" cpu = "9" >
< ip value = "192.168.122.12" />
</ client >
< client host = "loadnode6" weight = "1" maxusers = "40000" cpu = "9" >
< ip value = "192.168.122.13" />
</ client >
< client host = "loadnode7" weight = "1" maxusers = "40000" cpu = "9" >
< ip value = "192.168.122.14" />
</ client >
</ clients >
 
< servers >
< server host = "192.168.122.10" port = "80" type = "tcp" />
</ servers >
 
< load >
< arrivalphase phase = "1" duration = "10" unit = "minute" >
< users maxnumber = "15000" arrivalrate = "8" unit = "second" />
</ arrivalphase >
 
< arrivalphase phase = "2" duration = "10" unit = "minute" >
< users maxnumber = "15000" arrivalrate = "8" unit = "second" />
</ arrivalphase >
 
< arrivalphase phase = "3" duration = "30" unit = "minute" >
< users maxnumber = "20000" arrivalrate = "3" unit = "second" />
</ arrivalphase >
 
</ load >
 
< sessions >
< session probability = "100" name = "ab" type = "ts_http" >
< for from = "1" to = "10000000" var = "i" >
< request > < http url = "/test.txt" method = "GET" version = "1.1" /> </ request >
</ for >
</ session >
</ sessions >
</ tsung >
刚开始的时候有很多东西要理解,但你一旦理解了它们后就会变得很简单。
<client> 只是简单地指定了运行 Tsung 的主机。你可以指定 Tsung 使用的 IP 和 CPU 的最大数。你可以使用 maxusers 设置节点能够模拟的用户数量上限。每一个用户都会执行我们之后定义的操作。
<servers> 指定了你要测试的 HTTP 服务器。我们可以使用这个选项去测试一个 IP 集群,或者一个单一的服务器。
<load> 定义了我们的模拟用户将会在什么时候“到达”我们的网站。以及它们达到的有多快。
 <arrivalphase> 在持续了 10 分钟的第一个阶段里,以 每秒 8 个用户的速率到达了 15,000 个用户。
<arrivalphase phase=”1″ duration=”10″ unit=”minute”>
<users maxnumber=”15000″ arrivalrate=”8″ unit=”second”/>
 这里还有两个 arrivalphases,它们的用户都以同样的方式达到。
 这些 arrivalphases 一起组成了一个 <load>,它控制了我们可以每秒产生多少个请求。
<session> 这部分定义了一旦这些用户达到了你的网站,它们将会执行什么动作。
probability 允许你定义用户可能会做的随机事件。有时他们可能点击这里,有时他们可能点击那里。所有的Probability 加起来一定要等于 100% 。
在上面的配置里,用户只做一件事,所以它的 probability 等于 100% 。
<for from=”1″ to=”10000000″ var=”i”> 这就是用户在 100% 的时间里做的事情。它们循环遍历 10,000,000 次并且 <request> 一个网页:/test.txt 。
这个循环结构允许我们使用少量的用户连接去获取比较大的每秒请求数量。
一旦你已经很好地理解了它们,你就可以创建一个便利的别名,去快速观察 Tsung 报告。
vim ~/.bashrc
alias treport= "/usr/lib/tsung/bin/tsung_stats.pl; firefox report.html"
1
source ~/.bashrc
然后启动 Tsung
1
2
3
[root@loadnode1 ~] tsung start
Starting Tsung
"Log directory is: /root/.tsung/log/20120421-1004"
结束后观察报告
1
2
cd /root/ .tsung /log/20120421-1004
treport #生成图片报告
把20120421-1004冲ftp下载下来就可以使用查看了。 

使用 Tsung 去规划你的集群构造
现在我们拥有了一个足够强大的负载测试工具,我们可以规划余下的集群构造了:
1. 使用 Tsung 去测试一个单一的 HTTP 服务器。获取一个基本的基准。
2. 对 web 服务器进行调优,定期使用 Tsung 进行测试提高性能。
3. 对这些系统的 TCP 套接字进行调优,获取最佳的网络性能。再来一次,测试,测试,不停地测试。
4. 构造 LVS 集群,它包含了这些充分调优过的 web 服务器。
5. 使用 Tsung IP 集群对 LVS 进行压力测试。

作者:Jerome_s 发表于2015/7/23 23:14:36 原文链接
阅读:109 评论:0 查看评论

相关 [服务器 程序 压力测试] 推荐:

服务器程序压力测试、性能测试

- - CSDN博客综合推荐文章
         负载生成器是一些生成用于测试的流量的程序. 它们可以向你展示服务器在高负载的情况下的性能,以及让你能够找出服务器可能存在的问题. 为了得到更加客观和准确的数值,应该从远程访问、局域网访问和本地等多个方面进行全方位的测试. 一般用127.0.0.1进行本机测试.         ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL进行访问,可用来测试Apache的负载压力,也可以测试nginx、lighthttp、IIS等其它Web服务器的压力.

网络IO型程序压力测试要点

- - 五四陈科学院
以下内容由 [五四陈科学院]提供. 一.突破客户端端口数限制. 这是第一个会遇到的问题,同一IP地址,最大端口只能到65535. 现在能够直接找到的原因是TCP协议中(rfc793)定义了报头的端口长度为16位. 但是从计算机网络的发展来看,端口长度定义同IPv4定义一样,都是当时的同志们拍脑袋的结果.

Linux磁盘或者其他类型服务器压力测试的几款工具简介

- - CSDN博客推荐文章
       ㈠ dd:从一个源读取数据然后以比特形式写到另一个目标地址.           if:从哪来.           of:往哪去.           bs:每次读取的数据块大小.           count:读多少个bs.           conv:消除Linux内存缓存的影响,保证数据直接写入磁盘.

压力测试工具Benchmark

- - 企业架构 - ITeye博客
已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

使用webbench做压力测试

- - 三水清
元旦假期帮朋友折腾VPS,安装了centOS和lnmp,网站部好了,而且定时任务也加上了,觉得应该做个压力测试,之前用过apache自带的ab,不过今天使用的是 webbench做压力测试. 首先我们先来安装webbench吧, 为了测试准确,请将 webbench 安装在别的linux服务器上, 因为webbench 做压力测试时,自身也会消耗CPU和内存资源, 否则, 很可能把自己服务器搞挂掉.

Mysql压力测试shell脚本

- - CSDN博客数据库推荐文章
转载请注明,来自: http://blog.csdn.net/skyman_2001. Mysql自带了压力测试工具mysqlslap,所以我们可以不用自己编写程序来测试Mysql读取的压力. 上面脚本的意思是每隔100ms循环做这样的事:模拟100个mysql客户端,对数据库test的表test执行200次插入(number-of-queries = concurrency * 每个mysql客户端的查询次数,所以这里的每个mysql客户端的查询次数是2次),迭代10次.

Jmeter教程 简单的压力测试

- - 行业应用 - ITeye博客
Jmeter是一个非常好用的压力测试工具.   Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好.     做压力测试的常用工具.     做压力测试的步骤如下:.     本文做压力测试的例子.     第一步: 使用CSV Data Set Config 来参数化.

服务器高性能程序 磁盘I/O篇

- Deejan - C++博客-首页原创精华区
一.设备-------- 影响磁盘性能的因素. 硬盘的转速影响硬盘的整体性能. 一般情况下转速越大,性能会越好. 硬盘的性能因素主要包括两个:1.平均访问时间2传输速率. 平均访问时间包括两方面因素:. 平均寻道时间(Average Seek Time)是指硬盘的磁头移动到盘面指定磁道所需的时间. 平均旋转等待时间(Latency)是指磁头已处于要访问的磁道,等待所要访问的扇区旋转至磁头下方的时间.

java程序实现对sftp服务器的操作

- - Java - 编程语言 - ITeye博客
java程序实现对sftp服务器的操作. FTP服务器中,如果使用的是FTP协议,则用户名和密码是以明文方式传输的,如果是以SFTP 的方式,就会通过加密的方式传输. 如果服务器中的用户增加了公钥的设置,则要求客户端要有相对应的私钥. 公/私钥的产生方法可见:http://www.jcraft.com/jsch/examples/KeyGen.java.html,值得注意的是,可以产生用密码的公私钥和无密码的公私钥.

tcpcopy,模拟在线压力测试的好帮手

- kissingwolf - MySQL 中文网 -
主要信息来自:http://code.google.com/p/tcpcopy/. tcpcopy是一个基于底层的应用请求复制(所有基于tcp的packets)开源项目,可用于替代ab做在线模拟压力测试,可转发各种在线请求到测试服务器上,进行较为详尽的近乎实际的测试,从而避免了新业务、系统上线带来的潜在问题.