这一篇我们来说Nginx配置性能优化与压力测试webbench。

 

基本的 (优化过的)配置

我们将修改的唯一文件是nginx.conf,其中包含Nginx不同模块的所有设置。你应该能够在服务器的/etc/nginx目录中找到nginx.conf。首 先,我们将谈论一些全局设置,然后按文件中的模块挨个来,谈一下哪些设置能够让你在大量客户端访问时拥有良好的性能,为什么它们 会提高性能。本文的结尾有一个完整的配置文件。

高层的配置

nginx.conf文件中,Nginx中有少数的几个高级配置在模块部分之上。

  1. user www-data;

2. pid /var/run/nginx.pid;

3. worker_processes auto;

4. worker_rlimit_nofile 100000;

user和pid应该按默认设置 - 我们不会更改这些内容,因为更改与否没有什么不同。

worker_processes 定义了nginx对外提供web服务时的worker进程数。最优值取决于许多因素,包括(但不限于)CPU核的数量、存储 数据的硬盘数量及负载模式。不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(设置为“auto”将尝试自动检测它)。 worker_rlimit_nofile 更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和 Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了。

Events模块

events模块中包含nginx中所有处理连接的设置。

  1. events {

2. worker_connections 2048;

3. multi_accept on;

4. use epoll;

5. }

worker_connections 设置可由一个worker进程同时打开的最大连接数。如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值 设得很高。 记住,最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处。 multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接。 use 设置用于复用客户端线程的轮询方法。如果你使用Linux 2.6+,你应该使用epoll。如果你使用*BSD,你应该使用kqueue。 (值得注意的是如果你不知道Nginx该使用哪种轮询方法的话,它会选择一个最适合你操作系统的)

压力测试

在压力测试中存在一个共性,那就是压力测试的结果与实际负载结果不会完全相同,面对这些问题,我们只能尽量去想方设法去模拟。目前较为常见的网站压力测试工具有webbench、ab(apache bench)、 tcpcopy、loadrunner。

以webbench为例子,来说一下压力测试

安装webbench

#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

进行压力测试

并发200时

# webbench -c 200 -t 60 http://www.loudsay.com/index.php

参数解释:-c为并发数,-t为时间(秒)

Webbench - Simple Web Benchmark 1.5

Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://www.loudsay.com/index.php

200 clients, running 60 sec.

Speed=1454 pages/min, 2153340 bytes/sec.

Requests: 1454 susceed, 0 failed.

当并发200时,网站访问速度正常


并发800时

#webbench -c 800 -t 60 http://www.loudsay.com/index.php

Webbench - Simple Web Benchmark 1.5

Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://www.loudsay.com/index.php

800 clients, running 60 sec. Speed=1194 pages/min, 2057881 bytes/sec.

Requests: 1185 susceed, 9 failed.

当并发连接为800时,网站访问速度稍慢


并发1600时

#webbench -c 1600 -t 60 http://www.loudsay.com/index.php

Webbench - Simple Web Benchmark 1.5

Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://www.loudsay.com/index.php

1600 clients, running 60 sec. Speed=1256 pages/min, 1983506 bytes/sec.

Requests: 1183 susceed, 73 failed.

当并发连接为1600时,网站访问速度便非常慢了


并发2000时

#webbench -c 2000 -t 60 http://www.loudsay.com/index.php

Webbench - Simple Web Benchmark 1.5

Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://www.loudsay.com/index.php

2000 clients, running 60 sec. Speed=2154 pages/min, 1968292 bytes/sec.

Requests: 2076 susceed, 78 failed.

当并发2000时,网站便出现“502 Bad Gateway”,由此可见web服务器已无法再处理用户访问请求