为支持nginx高并发而修改的一些Linux内核参数

前言

由于默认的Linux内核参数考虑的是最通用的场景,这明显不符合用于支持高并发访问的Web服务器定义,所以需要修改Linux内核参数,使的nginx拥有更高的性能。

在优化内核时, 可以做的事情很多, 不过, 我们通常会根据业务特点来进行调整, 当
Nginx作为静态Web内容服务器、 反向代理服务器或是提供图片缩略图功能(实时压缩图片)
的服务器时, 其内核参数的调整都是不同的。 这里只针对最通用的、 使Nginx支持更多并发
请求的TCP网络参数做简单说明。

修改

修改的文件是/etc/sysctl.conf文件来更改内核参数。然后执行sysctl -p 让修改生效。

  • fs.file-max=999999 :这个参数表示一个进程可以同时打开的最大句柄数,这个参数值直接限制最大并发连接数,需要根据实际配置。因为连接在linux系统表示为一个文件句柄。
  • net.ipv4.tcp_tw_reuse=1:这个参数设置为1,表示允许将TIME-WAIT状态下的socket重新用于新的TCP连接,达到连接的复用,而不用关闭再创建,这对于服务器来说是很有意义的,因为服务器上总是会有大量的TIME-WAIT状态的连接。
  • net.ipv4.tcp_keepalive_time=600:这个参数表示当keepalive启用时,TCP发送keepalive消息的频度,默认是2小时,将其设置小一些,可以更快清理无效的连接,也就是设置长连接心跳检测的频度。
  • net.ipv4.tcp_fin_timeout=60:这个参数表示当服务器主动关闭连接时, socket保持在FIN-WAIT-2状
    态的最大时间。
  • net.ipv4.tcp_max_tw_buckets = 5000:这个参数表示操作系统允许TIME_WAIT套接字数量的最大值,如果超过这个数字, TIME_WAIT套接字将立刻被清除并打印警告信息。 该参数默认为180000, 过多的TIME_WAIT套接字会使Web服务器变慢。
  • net.ipv4.ip_local_port_range = 1024 61000:这个参数定义了在UDP和TCP连接中本地(不包括连接的远端)端口的取值范围。
  • net.ipv4.tcp_max_syn_backlog=8192:这个参数表示TCP三次握手建立阶段接收SYN请求队列的最大长度, 默认为1024, 将其设置得大一些可以使出现Nginx繁忙来不及接收新连接的情况时,Linux不至于丢失客户端发起的连接请求。就是来不及接收的请求会入列,如果队列满了会直接返回错误信息给客户端。如果设置大一些就可以接收多一点连接。
  • net.ipv4.tcp_rmem = 4096 32768 262142:这个参数定义了TCP接收缓存(用于TCP接收滑动窗口) 的最小值、 默认值、 最大值。
  • net.ipv4.tcp_wmem = 4096 32768 262142:这个参数定义了TCP发送缓存(用于TCP接收滑动窗口) 的最小值、 默认值、 最大值。
  • net.core.netdev_max_backlog = 8096:当网卡接收数据包的速度大于内核处理的速度时, 会有一个队列保存这些数据包。 这个参数表示该队列的最大值。
  • net.core.rmem_default = 262144:这个参数表示内核套接字接收缓存区默认的大小,也就是接收一个Socket套接字连接时,内核缓冲区的默认大小。
  • net.core.wmem_default = 262144:这个参数表示内核套接字发送缓存区默认的大小,也就是发送一个Socket套接字连接时,内核缓冲区的默认大小。
  • net.core.rmem_max = 2097152:这个参数表示内核套接字接收缓存区最大的大小,也就是接收一个Socket套接字连接时,内核缓冲区的最大大小。
  • net.core.wmem_max = 2097152:这个参数表示内核套接字发送缓存区最大的大小,也就是发送一个Socket套接字连接时,内核缓冲区的最大大小。
  • net.ipv4.tcp_syncookies = 1 :与性能无关,用于解决TCP的SYN攻击。

滑动窗口的大小与套接字缓存区会在一定程度上影响并发连接的数目。 每个TCP连接都会为维护TCP滑动窗口而消耗内存, 这个窗口会根据服务器的处理速度收缩或扩张。

你可能感兴趣的:(nginx,nginx,linux)