Nginx优化总结

优化思路

Nginx处理请求大体可以分成下面两个阶段,两个阶段的优化都可以结合系统层面和应用层面。

  • 请求(socket连接)
  • 响应(文件)

请求

应用层面

  • worker_connections,每个worker进程可以连接的客户端数量,内存充足的情况下,可以调到1W以上。
  • worker_processes 用来设置Nginx 服务的进程数,一般设置为CPU的倍数。
  • worker_cpu_affinity 绑定每个进程到指定的CPU核心,充分利用多核。

系统层面

  • somaxconn 全连接队列长度,Accept queue大小为 min(somaxconn【内核层】, backlog【应用层】),位于 /proc/sys/net/core/somaxconn,可以修改成2048,不过调太大可能会导致处理时间过长,上游服务器超时.
  • tcp_tw_reuse 将处于TIME_WAIT状态(持续超过1秒)的socket用于新的TCP连接,需同时开启TCP时间戳的支持,即net.ipv4.tcp_timestamps=1(默认即为1)。
  • tcp_syncookies SYN等待队列溢出时,启用cookies来处理,新的连接不再用半连接队列处理。

响应

应用层面

  • worker_rlimit_nofile 配置进程能打开的文件描述符,可以往高配置。
  • sendfile 零拷贝的实现,参数传入文件和socket描述符,先通过DMA将磁盘数据拷贝到内核文件缓冲区,再把文件缓冲区的【描述符】和数据长度拷贝到socket缓冲区,全程由DMA参与,无需通过CPU。

系统层面

  • ulimit -n 每个进程可以打开的文件描述符数量,这个参数配置大点也没问题,可以直接配置成100W。
posted @ 2021-01-13 20:07  defmain  阅读(101)  评论(0编辑  收藏  举报