解放军105医院官网:Apache最大连接数性能测试

来源:百度文库 编辑:九乡新闻网 时间:2024/05/17 08:39:05

Apache最大连接数性能测试

(2010-03-07 19:34:40)转载 标签:

it

分类: 测试技术  Apache最大连接数性能测试

  这天工作没什么事情,翻开看资料,再次学习一下apache的性能优化,以下就说说我的设置及测试。

  先说一下我的测试机硬件及软件配置环境:

  硬件:一台比较古老的机器,cpu: P42.0 ,内存256,其他的就不多说了。

  软件:linux as 4 , apache2.0.59。

  先说一下这次安装及配置就是测试apache的性能,如果你打算看其他方面的,那就不要看了,因为偶也没有写,嘿嘿嘿……

  ./configure --prefix=/usr/local/apache2 --with-mpm=worker --enable-so

  说明:

  MPM={beos|worker|prefork|mpmt_os2| perchild|leader|threadpool}

  我这里mpm使用的是worker,以下说明一下mpm个参数;

  MPM的引入是Apache 2.x最重要的变化,影响apache2.x 性能的最核心特性,

  MPM(Multi -Processing Modules,多道处理模块),运行在一种多进程与多线程相混合的模式下,增强部分配置的可扩充性能。相比于Apache 1.3, 2.x版本本做了大量的优化来提升处理能力和可伸缩性,并且大多数改进在默认状态下即可生效。但是在编译和运行时刻,2.x也有许多可以显著提高性能的选择。

  Beos、mpmt_os2分别是BeOS和OS/2上缺省的MPM。

  perchild主要设计目的是以不同的用户和组的身份来运行不同的子进程。这在运行多个需要CGI的虚拟主机时特别有用,会比1.3版本中的SuExec 机制做得更好。

  leader和threadpool都是基于worker的变体。

  prefork就是Unix平台上缺省的MPM。它所采用的预派生子进程方式也是 Apache 1.3中采用的模式。prefork本身并没有使用到线程,2.x版本使用它是为了与1.3版本保持兼容性;另一方面,prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一。若使用prefork,在make编译和make install安装后,使用“httpd -l”来确定当前使用的MPM,应该会看到prefork.c查看缺省生成的httpd.conf配置文件,里面包含如下配置段:

 


StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0

 

  worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild 线程数,各个线程独立地处理请求。同样,为了不在请求到来时再临时生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。

worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild 线程数,各个线程独立地处理请求。同样,为了不在请求到来时再临时生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。

  MinSpareThreads和MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。

  ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用 ThreadLimit指令,它的最大缺省值是20000。上述两个值位于源码树server/mpm/worker/worker.c中的以下两行:

  #define DEFAULT_THREAD_LIMIT 64

  #define MAX_THREAD_LIMIT 20000

  这两行对应着ThreadsPerChild和ThreadLimit的限制数。最好在configure之前就把64改成所希望的值。注意,不要把这两个值设得太高而超过系统的处理能力,从而导致因Apache不起动而使系统不稳定。

  Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,主控进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)。这两个值位于源码树server/mpm/worker/worker.c中的以下两行:

  #define DEFAULT_SERVER_LIMIT 16

  #define MAX_SERVER_LIMIT 20000

  以上内容我也是从我以前文档里cp的,也许有点过时,对于初次学习还是有帮助的。HOHOHO

  好了,以下是我的机器实际配置过程。

  我使用的MPM是worker,我要通过修改源代码文件,尽量增大进程数和线程数,

  修改文件为;/root/httpd-2.0.59/server/mpm/worker/worker.c

  修改内容:

  #define DEFAULT_SERVER_LIMIT 50

  #define DEFAULT_THREAD_LIMIT 100

  然后开始编译,安装咯……

  安装完成后,我将配置文件中worker 修改为以下;

  

  StartServers        10

  MaxClients          900

  ServerLimit         50

  MinSpareThreads     25

  MaxSpareThreads     75

  ThreadsPerChild     90

  ThreadLimit        100

  MaxRequestsPerChild  0

  

  具体参数说明,以上文档有。这里就不说了。

以下开始测试:

  ab是Apache超文本传输协议(HTTP)的性能测试工具。 其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求。

  此命令其他参数就不多说了,你可以google,会很多我,我也是go出来的,我用的了以下俩个参数:

  -c concurrency

  一次产生的请求个数。

  -n requests

  在测试会话中所执行的请求个数。

  以下我测试3次,如下:

  [root@abb conf]# ab -n 1000 -c 100 [url]http://192.168.1.226/[/url]

  表示同时处理1000个请求并运行100次

  This is ApacheBench, Version 2.0.41-dev <$Revision: 1.141 $> apache-2.0

  Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, [url]http://www.zeustech.net/[/url]

  Copyright (c) 1998-2002 The Apache Software Foundation, [url]http://www.apache.org/[/url]

  Benchmarking 192.168.1.226 (be patient)

  Completed 100 requests

  Completed 200 requests

  Completed 300 requests

  Completed 400 requests

  Completed 500 requests

  Completed 600 requests

  Completed 700 requests

  Completed 800 requests

  Completed 900 requests

  Finished 1000 requests

  Server Software:        Apache/2.0.59

  测试机apache版本号

  Server Hostname:        192.168.1.226

  测试机主机名

  Server Port:            80

  测试机端口

  Document Path:          /

  测试机目录

  Document Length:        1456 bytes

  文档大小

  Concurrency Level:      100

  并发数

  Time taken for tests:   1.305834 seconds

  整个测试持续的时间

  Complete requests:      1000

  完成请求的数量

  Failed requests:        0

  失败请求数量

  Write errors:           0

  错误请求数量

  Total transferred:      1924263 bytes

  整个测试的网络传输量

  HTML transferred:       1489488 bytes

  整个测试html页面的网络传输量

  Requests per second:    765.79 [#/sec] (mean)

  关注1:每秒事务数

  Time per request:       130.583 [ms] (mean)

  关注2:平均事务响应时间

  Time per request:       1.306 [ms] (mean, across all concurrent requests)

  每个请求实际运行时间的平均值

  Transfer rate:          1438.93 [Kbytes/sec] received

  平均每秒网络上的流量

  Connection Times (ms)

  min  mean[+/-sd] median   max

  Connect:       17   45  17.1     47      92

  Processing:    21   76  58.7     61     585

  Waiting:         56  24.0     52     116

  Total:         64  121  57.5    119     610

  网络上消耗时间的分解

  Percentage of the requests served within a certain time (ms)

  50%    119

  66%    122

  75%    125

  80%    132

  90%    139

  95%    172

  98%    325

  99%    465

  100%    610 (longest request)

 整个场景的响应情况,只重50%的用户响应时间小于119豪秒,66%的用户响应时间小于122豪秒……

  再测试一个:

  ab -n 10000 -c 1000 [url]http://192.168.1.226/[/url]

  请求处理10000个并行运行1000次

  Document Path:          /

  Document Length:        1456 bytes

  Concurrency Level:      1000

  Time taken for tests:   27.371944 seconds

  Complete requests:      10000

  Failed requests:        0

  Write errors:           0

  Total transferred:      18958599 bytes

  HTML transferred:       14675024 bytes

  Requests per second:    365.34 [#/sec] (mean)

  Time per request:       2737.194 [ms] (mean)

  Time per request:       2.737 [ms] (mean, across all concurrent requests)

  Transfer rate:          676.39 [Kbytes/sec] received

  Connection Times (ms)

  min  mean[+/-sd] median   max

  Connect:        252 1416.5       20999

  Processing:    13  464 841.6    254   15626

  Waiting:        439 849.1    227   15624

  Total:         28  717 1909.5    283   21692

  Percentage of the requests served within a certain time (ms)

  50%    283

  66%    403

  75%    650

  80%    663

  90%    688

  95%   1672

  98%   6693

  99%   9689

  100%  21692 (longest request)

  呵呵……好了。到此写完,有哪里不对也给我提个醒。相互学习才能进步。