Nginx参数调优

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等

建立测试基线

我们使用 HTTP 负载能力测试工具 ApacheBench, 又称 ab ,为NGINX系统做流量测试
这个负载测试工具对web应用的测试非常简单而有效。针对不同类型的测试场景,ApacheBench提供相当丰富的选项。

格式:ab [options] [http://]hostname[:port]/path

ab -c 40 -n 10000 http://127.0.0.1:9100/

-n requests Number of requests to perform     //本次测试发起的总请求数
-c concurrency Number of multiple requests to make   //一次产生的请求数(或并发数)

执行这条命令时,我们将并发级数( -c 参数)设置成40,意味着 ab 至少会跟我们的NGINX实例保持40个并行
的HTTP会话,请求总数达到50000个。

Benchmarking 127.0.0.1 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        nginx/1.12.0
Server Hostname:        127.0.0.1
Server Port:            9100

Document Path (测试页面):          /
Document Length (页面大小):        19605 bytes

Concurrency Level (测试的并发数):      40
Time taken for tests (整个测试持续的时间):   271.164 seconds
Complete requests (完成的请求数量):      10000
Failed requests (失败的请求数量):        9695
   (Connect: 0, Receive: 0, Length: 9695, Exceptions: 0)
Non-2xx responses:      9695
Total transferred (整个过程中的网络传输量):      30731909 bytes
HTML transferred (整个过程中的HTML内容传输量):       19901545 bytes
#Requests per second 最重要的指标之一,相当于LR中的每秒事务数,后面括号中的mean表示这是一个平均值
Requests per second :    36.88 [#/sec] (mean)
#Time per request 最重要的指标之二,相当于LR中的平均事务响应时间,后面括号中的mean表示这是一个平均值
Time per request:       1084.655 [ms] (mean)
#Time per request 每个连接请求实际运行时间的平均值
Time per request :       27.116 [ms] (mean, across all concurrent requests)
#Transfer rate 平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题
Transfer rate:          110.68 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       2
Processing:    75 1081 245.7    986    3681
Waiting:       75 1081 245.7    986    3681
Total:         77 1081 245.7    986    3682

Percentage of the requests served within a certain time (ms)
  50%    986
  66%   1039
  75%   1131
  80%   1197
  90%   1389
  95%   1545
  98%   1747
  99%   2011
 100%   3682 (longest request)

带着我们的基线指标集,我们开始调优NGINX

worker_processes 工作线程

NGINX最基础的一个参数就是可用的工作线程数。默认下,这个参数的值是auto,即NGINX会按照系统上CPU个数的工作线程
对于大多数系统,一个CPU一个工作线程是性能均衡的、小负载的

第一个测试,我们为每一个CPU设置为两个工作进程

我的系统上有2个cpu,所以设置四个工作进程

编辑/etc/nginx/nginx.conf文件中的参数worker_processes 。这是NGINX 默认配置文件,今天我们将会调整的参数都在这个文件中。

#worker_processes auto;
从上面看到这个参数的默认值是 auto。现在我们把它修改为4。

worker_processes 4;

修改完后需要保存/etc/nginx/nginx.conf 文件,为了让配置修改生效我们需要重启NGINX

ps -elf | grep nginx
    0 44105     1        4   0  31  0  4299476   2108 -      Ss                  0 ??         0:00.02 nginx: master pr 25 618
  501 72814 44105      104   0  31  0  4299712   1240 -      S                   0 ??         0:00.00 nginx: worker pr  3:04下午
  501 72815 44105      104   0  31  0  4299712   1228 -      S                   0 ??         0:00.00 nginx: worker pr  3:04下午
  501 72816 44105      104   0  31  0  4299712   1204 -      S                   0 ??         0:00.00 nginx: worker pr  3:04下午
  501 72817 44105      104   0  31  0  4299712   1212 -      S                   0 ??         0:00.00 nginx: worker pr  3:04下午

从上面可以看到有4个运行的进程,名称为nginx: worker process。这表明我们的修改是成功的

检查效果
Time per request:       1190.445 [ms] (mean)

改动后 Time per request 从1084.655 变成1190.445 就只多了100左右

让我们继续修改 worker_processes 参数的值为8,为CPU个数的4倍。为了检验修改是否有效,我们需要再次重启NGINX 服务

最好方式是一步一步地,每次做一些小的增量变化,然后测量性能是否增加。 对于这个参数,我每次以2的倍数递增,然后重新运行测试。重复这个过程直到每秒请求数的值不再增加。

你可能感兴趣的:(Nginx参数调优)