文章目录
前言
一、Nginx高并发
Linux下高并发socket最大连接数所受的各种限制
1.修改用户进程可打开文件数限制
/etc/security/limits.conf
nginx - nofile 65535
2.Linux系统级的最大打开文件数限制
fs.file-max = 188414 //和内存容量相关
3.修改网络内核对TCP连接的有关限制
net.ipv4.ip_local_port_range = 1024
4.限制接收新 TCP 连接侦听队列的大小
net.core.somaxconn = 2048
5.启用tcp连接timewait快速回收和重用
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
1.cpu核心数的优化
vim nginx.conf
3 worker_processes auto; #设定cpu核心自动分配
3 worker_processes 2; #设定只是用2个核心
4 worker_cpu_affinity 01 10; #进行cpu核心的绑定
2.最大连接数的优化
vim nginx.conf
events {
14 worker_connections 65535; #设定nginx的最大连接数
15 }
vim /etc/security/limits.conf
60 nginx - nofile 65535 #添加后即可生效使用热插拔模块在内存中立刻生效
切换到nginx用户查看最大打开文件数即可看到为65535
3.网络阻塞
vim /usr/local/nginx.com
28 sendfile on; #开启sendfile可以开启高效文件传输模式(zero copy 方式),避免内核缓冲区数据和用户缓冲区数据之间的拷贝。
29 tcp_nopush on; #采用tcp_cork标准进行传输即客户的访问数据在Nginx的缓冲区域到达一定量的时候会进行发送有助于解决网络阻塞
30 tcp_nodelay on; #此参数和tcp_nopush互斥可以开启nginx会自行兼容本身参数,表示将所有的数据有了不论是否填满缓冲区域立刻发送
tcp_nopush,tcp_nodelay,开启前提必须开启sendfile
三个指令都开启的好处是,sendfile可以开启高效的文件传输模式,tcp_nopush开启可以确保在发送到客户端之前数据包已经充分“填满”, 这大大减少了网络开销,