zoukankan      html  css  js  c++  java
  • Nginx配置性能优化与压力测试webbench【转】

    这一篇我们来说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服务器已无法再处理用户访问请求

  • 相关阅读:
    贪婪算法、递归计算、动态规划背包问题
    递归、动态规划计算斐波那契数列
    用于确定两个字符串最长公共子串的函数
    快速排序算法
    顺序、二分查找文本数据
    MyBatis面试题
    Spring面试题
    SpringMvc面试题
    jsp和servlet面试
    EJB的理解
  • 原文地址:https://www.cnblogs.com/paul8339/p/6181912.html
Copyright © 2011-2022 走看看