2020-09-06

Nginx调优
 
1、TCP三次握手建立连接与四次握手断开连接
 
建立连接:
在socket未连接时,客户端和服务器双方都处于CLOSED状态,需要注意的地方是,只有客户端才能发起连接握手请求,服务端无法直接对客户端发起握手请求,当客户端需要对服务端传输数据的时候会会先服务端建立稳定可靠的连接。首先客户端需要对对服务端发起SYN握手请求并进入SYN_SEND状态,当服务端收到请求后回应一个SYN握手请求并附带回应同意ACK消息,随后服务端进入SYN_RECV状态,客户端回应服务端的SYN握手请求,所以回应ACK消息并进入ESTABLSHED状态,服务端收到客户端的ACK后也会进入ESTABLUSHED状态,此时,连接建立完成,服务端会进入RECV阻塞,客户端会进入准备发送数据阶段,只有当客户端发送完数据之后,服务端的阻塞状态才会被解除,并且继续执行后续操作,完成后会再次进入到RECV阻塞状态。
 
TCP优化:把TCP无线向UDP靠拢
 
断开连接:
在socket连接后,客户端于服务端双方都可以在任意时刻关闭socket连接,此处假设客户端主动断开连接,现在客户端程序下达了close指令,程序会向服务端发送请求断开FIN消息,服务端收到FIN消息后会先回应ACK确认后再次回应FIN消息并进入LAST_ACK状态,客户端收到FIN消息后回应ACK确认后进入TIME_WAIT状态,服务端收到ACK后确认断开并关闭socket描述符,而客户端需要保持TIME_WAIT状态,保持时长为2MLS(两个数据包最大生存时间的总和)
 
ulimited:不限制用户可以使用的资源,但本设置对可打开的最大文件数(Max open files)和可同时运行的最大进程数(Max user processes)无效
-a 列出所有当前资源极限
-c 设置core文件的最大值,单位:blocks
-d 设置一个进程的数据段的最大值 单位:blocks
-h 指定设置某个给定资源的硬极限,如用户拥有root用户权限,可以增大硬极限,任何用户均可以减少硬极限
-l 可以所著物理内存最大值
-m 可以使用的常驻内存的最大值 单位:kbytes
-n 每个进程可以同时打开的最大文件数
-p 设置管道的最大值,单位为block,block=512bytes
-s 设置堆栈的最大值:单位:kbytes
-S 指定为给定资源设置软极限,阮籍吸纳可增大到硬极限的值,如果 -H和-S标志均为指定,极限适用于以上二者
-t 指定每个进程所使用的秒数,单位:seconds
-u 可以运行的最大并发进程
-v Shell可使用的最大虚拟的内存,单位:kbytes
 
[root@localhost yfr]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 3782
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 3782
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
 
注解:
core file size core 文件最大值为100 blocks
data seg size 进程的数据段可以任意大
file size 文件可以任意
pending signals   最多有2047个待处理信号
max locked memory 一个任务锁住了物理内存的最大值为32kb
max memory size 一个任务常驻物理内存的最大值
pipe size 管道的最大空间为4096字节
POSIX message queues POSIX 消息队列的最大值为819200字节
stack size 进程的栈的最大值为8192字节
cpu time 进程使用的CPU时间
max user processes 前用户同时打开进程(包括线程)的最大个数为2047
virtual memory 没有限制进程的最大地址空间·
file locks 所能锁住的文件最大个数没有限制
 
系统调优:
Nofile最大打开文件数限制,1024个文件,Windows 128个文件
 
ulimit -u  //查询最大打开文件数限制,后面加参数数字可修改文件限制(临时生效)
ulimit -SHn  //查询或添加 (后面加参数数字) 软限制和硬限制的最大值
S:报警值  H:最大值
 
添加到系统文件永久生效
[root@localhost yfr]# echo “ulimit -SHn 65535” >> /etc/rc.local
 
 
 
Nginx服务器配置文件调优
高效时间模型 and 时间模型
 
  2 user  nginx; 限制用户使用、nobody不能使用
  3 worker_processes  2; 设置为cpu物理核心数的2倍(cpu线程数)
  4 worke_rlimit_nofile 65535; 解除Nginx对自己最大打开文件数限制
  5
 13 events { 事件驱动模型
 14     use epoll; 添加、强制使用epoll
 15     worker_connections  65535; 最大并发数,一个核心处理最大并发为65535除以cpu核心数
 16 } 工作进程数,工作最大连接数 不大于65535
 19 http {
 20     include       mime.types;
 21     default_type  application/octet-stream;
 22     client_header_buffer_size 4k; 客户端请求头放到swap,以4k对齐存在swap交换分区
 23     open_file_cache_min_uses 1; 一次为操作则删除缓存
 24     open_file_cache_max 65535 inactive=60; 最大过期时间
 25     
 37     keepalive_timeout  65;   缩短保持连接时间,超过65秒,强制断开,可更改时间。
 39     gzip  on; 开启压缩代码(例如:html等)功能。增加带宽
 
 
内核参数优化篇:
[root@localhost nginx-1.11.5]# vim /etc/sysctl.conf
net.ipv4.tcp_max_tw_buckets = 6000 限制TIME_WAIT数量
net.ipv4.tcp_tw_recycle = 1 启用TIME_WAIT快速回收
net.ipv4.tcp_tw_reuse = 1 TIME_WAIT重用
net.ipv4.ip_local_port_range = 1024 65000 允许系统打开的端口范围
net.ipv4.tcp_syncookies = 1 SYN溢出保护
net.core.somaxconn = 2662144 全连接列队长度
net.core.netdev_max_backlog = 262144
当接受速度大于处理速度,允许送到backlog(半连接列队)的数量 全连接结满了放到backlog
net.ipv4.tcp_timestamps = 0 关闭时间戳相同
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_fin_timeout = 1
 
[root@localhost nginx-1.13.5]# sysctl –p 执行配置
查询swap交换分区大小(单位为:h)
[root@localhost nginx-1.11.5]# getconf PAGESIZE
4096
Nginx优化
 
实验需要一台虚拟机:
Nginx:192.168.1.10
 
[root@localhost nginx-1.11.5]# vim /usr/local/nginx/conf/nginx.conf
  1
  2 user  nginx;              //限制用户使用、nobody不能使用
  3 worker_processes  2;      //设置CPU物理核心数的2陪(CPU线程数)
  4 worker_rlimit_nofile 65525;  //解除nginx对自己最大打开文件数限制
  5
  6 #error_log  logs/error.log;
  7 #error_log  logs/error.log  notice;
  8 #error_log  logs/error.log  info;
  9
 10 #pid        logs/nginx.pid;
 11
 12
 13 events {     //事件驱动模型,使用epoll
 14     use epoll;       //添加,强制使用epoll
 15     worker_connections  65535;   //最大并发数,一个核心处理最大并发为65535除以cpu核心数
 16 }     //工作进程数*工作最大连接数 不大于65535
 17
 18
 19 http {
 20     include       mime.types;
 21     default_type  application/octet-stream;
 22     client_header_buffer_size 4k;      //客户端请求头放到swap,以4k对齐存在在swap交换分区
 23     open_file_cache_min_user 1;      //一次末操作则删除缓存
 24     open_file_cache_max=65535 inactive=60s;   //打开最大缓存文件为65535,过期时间为60秒,踢出缓存  
 25     #log_format  main  '$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “KaTeX parse error: Expected 'EOF', got '#' at position 24: …     '  26     #̲               …status b o d y b y t e s s e n t " body_bytes_sent " bodybytessent"http_referer” ’
 27     #                  ‘“ h t t p u s e r a g e n t " " http_user_agent" " httpuseragent""http_x_forwarded_for”’;
 28
 29     #access_log  logs/access.log  main;
 30
 31     sendfile        on;
 32     #tcp_nopush     on;
 33
 34     #keepalive_timeout  0;
 35     keepalive_timeout  65;    //缩短保持连接时间,超过65秒,强制断开,可更改时间
 36
 37     gzip  on;               //开启压缩代码(例如:html等)功能,增加带宽
 
                                                
 
 
内核参数优化篇:
[root@localhost nginx-1.11.5]# vim /etc/sysctl.conf
 
net.ipv4.tcp_max_tw_buckets = 6000            //限制TIME_WAIT数量
net.ipv4.tcp_tw_recycle = 1                    //启用TIME_WAIT快速回收
net.pv4.tcp.tw_reuse = 1                      //TIME_WAIT重用
net.ipv4.ip_local_port_range = 1024 65000       //允许系统打开的端口范围
net.ipv4.tcp_syncookies = 1                   //SYN溢出保护    
net.core.somaxconn = 262144                //全连接列对长度
net.core.netdev_max_backlog = 262144       //当接收速度大于处理速度,允许送到backlog (半连接列队) 的数量
 
net.ipv4.tcp_timestamps = 0              //关闭时间戳i先拿给他丢包机制 高于1Gbps
net.ipv4.tcp_syn_retries = 2              //多少次SYN失败后放弃
net.ipv4.tcp_fin_timeout = 1             //FIN-WAIT-2状态超时时间
 
 
 
查询swap交换分区大小(单位:b)
[root@localhost nginx-1.11.5]# getconf PAGESIZE
4096
注意,这里要换成桥接模式,重启网络服务
 
[root@localhost nginx-1.11.5]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=dhcp     把静态IP改成动态IP
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=1e450249-b351-4001-98fa-e51418439144
DEVICE=ens33
ONBOOT=yes
IP、网关、子网掩码删掉
 
[root@localhost nginx-1.11.5]# yum -y install httpd-tools     安装tools
[root@localhost nginx-1.11.5]# ab -n 20000 -c 1000 http://127.0.0.1/index.html  查看分区大小
[root@localhost nginx-1.13.5]# ab -n 20000 -c 1000 http://127.0.0.1/index.html
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
 
Benchmarking 127.0.0.1 (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests
 
 
Server Software:        nginx/1.13.5
Server Hostname:        127.0.0.1
Server Port:            80
 
Document Path:          /index.html
Document Length:        169 bytes
 
Concurrency Level:      1000
Time taken for tests:   2.655 seconds
Complete requests:      20000
Failed requests:        0
Write errors:           0
Non-2xx responses:      20000
Total transferred:      6380000 bytes
HTML transferred:       3380000 bytes
Requests per second:    7533.39 [#/sec] (mean)
Time per request:       132.742 [ms] (mean)
Time per request:       0.133 [ms] (mean, across all concurrent requests)
Transfer rate:          2346.83 [Kbytes/sec] received
 
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   68 241.8      5    1046
Processing:     3   17  34.4     11     718
Waiting:        0   13  34.1      7     712
Total:          9   85 254.2     15    1643
 
Percentage of the requests served within a certain time (ms)
  50%     15
  66%     18
  75%     28
  80%     31
  90%     51
  95%   1022
  98%   1046
  99%   1061
 100%   1643 (longest request)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值