-
可以自动识别cpu进程数并且绑定worker_processes到每个进程上。
worker_processes auto;
为worker_processes增加参数auto。当设置成auto,Tengine将自动启动与cpu数量相同的worker进程。
worker_cpu_affinity on;
当设置成auto时,Tengine将根据worker的数量自动配置cpu绑定位图。绑定的顺序是按CPU编号从大到小。 -
修改events区域
worker_connections 60000; #默认每个worker连接数是1024 -
header头优化
client_header_buffer_size 8k; #客户请求头缓冲大小
large_client_header_buffers 4 8k; #如果header过大,它会使用这个参数来读取
-
http模块优化
server_tokens off; #错误页面中隐藏Tengine的版本,提高安全性
tcp_nodelay on; #告诉nginx不要缓存数据,而是一段一段的发送–当需要及时发送数据时,就应该给应用设置这个属性 -
系统内核优化(这个需要结合实际服务器硬件和访问量来修改)
net.ipv4.tcp_max_tw_buckets = 5000 #1st低于此值,TCP没有内存压力,2nd进入内存压力阶段,3rdTCP拒绝分配socket
net.ipv4.tcp_sack = 1 #定义SYN重试次数
net.core.netdev_max_backlog = 32768 #进入包的最大设备队列.默认是300,对重负载服务器而言,该值太低,可调整到2000.
net.ipv4.tcp_synack_retries = 2 #syn-ack握手状态重试次数,默认5,遭受syn-flood攻击时改为1或2
net.ipv4.tcp_syn_retries = 2 #外向syn握手重试次数,默认4
net.ipv4.tcp_tw_recycle = 1 #开启 TCP 连接中 TIME-WAIT sockets 的快速回收,默认为 0 ,表示关闭。
net.ipv4.tcp_tw_reuse = 1 #开启重用。允许将 TIME-WAIT sockets 重新用于新的 TCP 连接,默认为 0 ,表示关闭;
net.ipv4.tcp_fin_timeout = 30 #修改系統默认的 TIMEOUT 时间
net.ipv4.tcp_keepalive_time = 300 #表示当keepalive起用的时候,TCP发送 keepalive消息的频度。缺省是2小时,改为5分钟。
在大流量上TIME_WAIT还是偏大了一些。平时,TIME_WAIT在1000~2000,但是在大流量下,TIME_WAIT有明显上升。
- 升级nginx机器的Linux内核
目前linux内核版本为2.6,无法开启Tengine的SO_REUSEPORT特性。
SO_REUSEPORT support, so the connection setup speed could be three times faster than Nginx.
升级内核版本到3.10,nginx.conf开启reuse_port
events {
worker_connections 65535;
reuse_port on;
}