OPS

Tengine的进一步优化

Tengine的参数调整

Posted by DCL on December 5, 2015
  • 可以自动识别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;  
  }