ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 1. IP频率以及并发限制 > 选择对应站点,进入“流量限制” ![](https://img.kancloud.cn/56/39/56395057fc78bd27d41801316dac802d_1402x1254.png) > 可以在对应的配置文件里加入压测的调试页面 ``` location /status { stub_status on; access_log off; } ``` ## 2. PHP并发设置 > 软件商城里找到对应的php,设置->性能调整 ![](https://img.kancloud.cn/f4/5a/f45a73988592c39c2929633d22592b9c_647x599.png) ## 3. NGINX性能优化 > 软件商城里找到对应的nginx,设置->配置修改 ### worker_processes 配置 > 将 worker_processes auto 改为和你实际cpu数的1~2倍。 > 如本实例cpu为4核 ``` worker_processes 4; worker_cpu_affinity auto; ``` > 通过`ps -eo pid,args,psr | grep [n]ginx`可查看是否生效 ![](https://img.kancloud.cn/db/c6/dbc687ad906e3d1663c99040561864e6_1008x264.png) ### worker_rlimit_nofile 配置 > 当nginx的error.log里报了很多`Too many opened files`时候,则需要对《nginx 打开的文件句柄数》进行配置 > 查看系统支持的最大连接数 ``` ulimit -n ``` > 如果不是1048576 (默认1024),需进行修改 ~~~ # 该方式每次重启就会失效,记得再次设置 ulmint -n 1048576 ~~~ 或者 ``` vim /etc/security/limits.conf root soft nofile 1048576 root hard nofile 1048576 * soft nofile 1048576 * hard nofile 1048576 ``` > ulimit -n 还会影响到mysql 的并发连接数。提高文件连接数设置,也能提高mysql并发。 > `worker_rlimit_nofile` 设置为和ulimit -n相同的数,或者稍小一点。 ``` worker_rlimit_nofile 51200; ``` > 可通过`cat /proc/{nginx worker进程的pid}/limits` 查看 `worker_rlimit_nofile` 生效情况,查看`Max open files` ``` Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 31202 31202 processes Max open files 51201 51201 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 31202 31202 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us ``` ### worker_connections 配置 > 指的是单个工作进程允许建立的并发连接数 > 一个工作进程建立一个连接后,进程将打开一个文件副本。**所以这个数量还受操作系统设定的,进程最大可打开的文件数有关** > 设置为和`worker_rlimit_nofile`一样 ``` events { use epoll; worker_connections 51200; multi_accept on; } ``` ### keepalive_timeout 设置 > 是否支持tcp长连接,比如http 1.1之后,如果请求网站,需要打开其他的css以及图片资源时候,会进行沿用之前的tcp连接资源,以此达到速度的加快。 > 但是如果是在高并发的情况下,tcp连接严重缺乏的情况,就没必要再开启长连接了,或者设置短一点,尤其是只针对做app开发的,就更没有必要。 ``` keepalive_timeout 0; ``` > 当这个设置成功后,在chrome network调试,可以看到该请求资源由 connections: keepalive -> connections: close。 > 也可有效的防止“长连接测试“工具或者ddos工具 ## 系统层面进行调优 > `vim /etc/sysctl.conf` ``` net.core.somaxconn = 65535 #最大tcp监听连接数,默认128 net.core.netdev_max_backlog = 20000 #每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目,默认1000 net.ipv4.tcp_max_syn_backlog = 16384 #记录的那些尚未收到客户端确认信息的连接请求的最大值,默认为1024 net.ipv4.tcp_max_tw_buckets = 180000 #TIME_WAIT的最大数量(尽量调大),超出的部分会被关闭掉,并且日志记录报错信息 net.ipv4.tcp_fin_timeout = 15 # 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间,默认60 net.ipv4.tcp_max_orphans = 131072 #该参数用于设定系统中最多允许存在多少TCP套接字不被关联到任何一个客户文件句柄上,假如超过这个数字,没有与客户文件句柄关联到TCP套接字将立即被复位,同时发出警告信息,这个限制只是为了简单防治Dos攻击,一般系统内存充足的情况下,可以增大这个参数,默认32768 net.ipv4.tcp_tw_reuse = 1 #开启TIME-WAIT(空闲TCP)重用 net.ipv4.tcp_tw_recycle = 0 # (空闲TCP快速回收)不建议开启,如果tcp_tw_recycle和tcp_timestamps同时开启,服务器或者客户机网络处于NAT情况下,网络会经常被断开; net.ipv4.tcp_syncookies = 0 #不做TCP洪水抵御 net.ipv4.tcp_timestamps = 1 # 记录TCP连接的最新时间戳 ``` > `sysctl -p` 使其生效 > 为了以防tcp_timestamps、tcp_tw_recycle同时开启,建议查看系统参数是否生效 ~~~ cat /proc/sys/net/ipv4/tcp_timestamps cat /proc/sys/net/ipv4/tcp_tw_recycle cat /proc/sys/net/ipv4/tcp_tw_reuse ~~~