3.4Nginx配置进程数、并发数、系统优化
- 调整Nginx的主配置文件,增加并发量
worker processes 2; #调整到与CPU数量一致
events{
worker connection 65535; #每个worker最大并发连接数
}
- 调整内核参数
[root@proxy ~]# ulimit-a #查看所有的属性值
[root@proxy ~# ulimit-Hn 100000 #临时设置硬限制
[root@proxy ~]# ulimit-Sn 100000 并设置软限制
[root@proxy ~]# vim /etc/security/limits.conf
soft nofile 100000
hard nofile 100000
用户/组 软/硬限制 需要限制的项目 限制的值
验证
[root@proxy ~]# ab-n 2000-c 2000 http://192.168.136.131/ #自己访问自己,测试一下配置效果
3.5高并发下Nginx长连接
- nginx长连接短连接,可以增强服务器的容灾能力
- 场景:
HTTP1.1之后, HTTP协议支持持久连接,也就是长连接,优点在于在一个TCP连接上可以传送多个HTTP请求和响应减少了建立和关闭连接的消耗和延迟。如果我们使用了nginx去作为反向代理或者负载均衡,从客户端过来的长连接请求就会被转换成短连接发送给服务器端,为了支持长连接,我们需要在nginx服务器上做一些配置
- 要求:
使用nginx时,想要做到长连接,我们必须做到以下两点:1:从client到nginx是长连接2:从nginx到server是长连接对于客户端而言, nginx其实扮演着server的角色,反之,之于server, nginx就是一个client
- 配置:
我们要想做到Client与Nginx之间保持长连接,需要:
1: Client发送过来的请求携带"keep-alive"header.
2: Nginx设置支持keep-alive
3.6高并发下Nginx压缩
- gzip压缩作用:将响应报文发送至客户端之前可以启用压缩功能,这能够有效地节约带宽,并提高响应至客户端的速度,压缩会消耗nginx的cpu性能。
- gzip压缩可以配置http,server和location模块下
gzip on;
#设置允许压缩的页面最小字节数,页面字节数从header头得content-1ength中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于2k的字节数,小于2k可能会越压越大。
gzip_min_length 2k;
#设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。例如4 4k代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。48k代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。#如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
gzip_buffers 4 16k;
#压缩级别, 1-10,数字越大压缩的越好,也越占用CPU时间
gzip_comp_leve1 5;
#默认值: gzip-types text/html (默认不对js/css文件进行压缩)
#压缩类型,匹配MIME类型进行压缩
#不能用通配符text/*
#(无论是否指定)text/htm1默认已经压缩
#设置哪压缩种文本文件可参考conf/mime.types
gzip_types text/plain application/x-javascript text/css application/xm1;
#值为1.0和1.1代表是否压缩http协议1.0,选择1.0则1.0和1.1都可以压缩
gzip_http_version 1.0
#IE6及以下禁止压缩gzip.disable "MSIE [1-6]\.";
#默认值: off
#Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返包含"via"的 header头。
#off -关闭所有的代理结果数据的压缩
#expired-启用压缩,如果header头中包含"Expires"头信息
#no-cache-启用压缩,如果header头中包含"Cache-Control :no-cache"头信息
#no-store-启用压缩,如果header头中包含"Cache-Control :no-store"头信息
# private-启用压缩,如果header头中包含"Cache-Control :private"头信息
#no_l ast_modified -启用压缩,如果header头中不包含"Last-Modified"头信息
#no_etag-启用压缩,如果header头中不包含"ETag"头信息
#auth-启用压缩,如果header头中包含"Authorization"头信息
#any-无条件启用压缩
gzip_proxied expired no-cache no-store private auth:
#给CDN和代理服务器使用,针对相同ur1,可以根据头信息返回压缩和非压缩副本
gzip_vary on;
3.7高并发下Nginx状态监控
参数说明:
#活跃的连接数量
active connections
#总共处理了n个连接,成功创建n次握手,总共处理了n个请求
server accepts handled requests
#每个连接有三种状态waiting, reading, writing
reading-读取客户端的Header信息数这个操作只是读取头部信息,读取完后马上进入writing状态,因此时间很短writing一响应数据到客户端的Header信息数这个操作不仅读取头部,还要等待服务响应,因此时间比较长。
waiting-开启keep-alive后等候下一次请求指令的驻留连接
正常情况下waiting数量是比较多的,并不能说明性能差。反而如果reading +writing数量比较多说明服务并发有问题。
查看Nginx并发进程数: ps-eflgrep nginx | wc-
查看Web服务器TCP连接状态: netstat-n | awk '/^tcp/ (++S[$NF] END {for(a in S) print a, S[a]
解析:
CLOSED //无连接是活动的或正在进行
LISTEN //服务器在等待进入呼叫
SYN RECV //-个连接请求已经到达,等待确认
SYN SENT //应用已经开始,打开一个连接
ESTABLISHED /正常数据传输状态/当前并发连接数
FIN_ WAIT1 //应 它已经完成
FIN WAIT2 //另一边已同意释放
ITMED WAIT //等待所有分组死掉
CLOSING //两边同时尝试关闭
TIMEWAIT //另一边已初始化一个释放
LAST ACK //等待所有分组死掉
查看Web服务器TCP连接状态: netstat-n | awk '/^tcp/ {++S[$NF] END {for(a in S) print a, S[a]