nginx性能优化及内核参数调整

  

Nginx配置参数优化

  

Nginx作为高性能web服务器,即使不特意调整配置参数也可以处理大量的并发请求。
以下的配置参数是借鉴网上的一些调优参数,仅作为参考,不见得适于你的线上业务。

  

工人进程   

 <代码> worker_processes
  
  该参数表示启动几个工作进程,建议和本机CPU核数保持一致,每一核CPU处理一个进程。
  
  worker_rlimit_nofile
  
  它表示Nginx最大可用的文件描述符个数,需要配合系统的最大描述符,建议设置为102400。
  还需要在系统里执行ulimit - n 102400才可以。
  也可以直接修改配置文件/etc/安全/limits.conf修改
  增加:
  # *软nofile 655350(去掉前面的#)
  # * 655350(硬nofile(去掉前面的#)
  
  worker_connections
  
  该参数用来配置每个Nginx工人进程最大处理的连接数,这个参数也决定了该Nginx服务器最多能处理多少客户端请求
  (worker_processes * worker_connections),建议把该参数设置为10240,不建议太大。 
  

http和tcp连接

  
 <代码> epoll使用
  
  使用epoll模式的事件驱动模型,该模型为Linux系统下最优方式。
  
  multi_accept上
  
  使每个工人进程可以同时处理多个客户端请求。
  
  sendfile上
  
  使用内核的FD文件传输功能,可以减少用户模式和内核模式的切换,从而提升服务器性能。
  
  tcp_nopush上
  
  当tcp_nopush设置为时,会调用tcp_cork方法进行数据传输。
  使用该方法会产生这样的效果:当应用程序产生数据时,内核不会立马封装包,而是当数据量积累到一定量时才会封装,然后传输。
  
  tcp_nodelay上
  
  纳格尔不缓存data-sends(关闭算法),这个能够提高高频发送小数据报文的实时性。
  纳格尔(关于算法)
  【假如需要频繁的发送一些小包数据,比如说1个字节,以IPv4为例的话,则每个包都要附带40字节的头,
  也就是说,总计41个字节的数据里,其中只有1个字节是我们需要的数据。
  为了解决这个问题,出现了纳格尔算法。
  它规定:如果包的大小满足海量存储系统(MSS)中,那么可以立即发送,否则数据会被放到缓冲区,等到已经发送的包被确认了之后才能继续发送。
  通过这样的规定,可以降低网络里小包的数量,从而提升网络性能。】
  
  keepalive_timeout
  
  定义长连接的超时时间,建议30年代,太短或者太长都不一定合适,当然,最好是根据业务自身的情况来动态地调整该参数。
  
  keepalive_requests
  
  定义当客户端和服务端处于长连接的情况下,每个客户端最多可以请求多少次,可以设置很大,比如50000。
  
  reset_timeout_connection上
  
  设置为上的话,当客户端不再向服务端发送请求时,允许服务端关闭该连接。
  
  client_body_timeout
  
  客户端如果在该指定时间内没有加载完身体数据,则断开连接,单位是秒,默认60,可以设置为10。
  
  send_timeout
  
  这个超时时间是发送响应的超时时间,即Nginx服务器向客户端发送了数据包,但客户端一直没有去接收这个数据包。
  如果某个连接超过send_timeout定义的超时时间,那么Nginx将会关闭这个连接。单位是秒,可以设置为3。 
  

缓冲和缓存(以下配置都是针对单个请求)

  
 <代码> client_body_buffer_size
  
  当客户端以发布方法提交一些数据到服务端时,会先写入到client_body_buffer中,如果缓冲区写满会写到临时文件里,建议调整为128 k。
  
  client_max_body_size
  
  浏览器在发送含有较大HTTP身体的请求时,其头部会有一个内容长度字段,client_max_body_size是用来限制内容长度所示值的大小的。
  这个限制体的配置不用等Nginx接收完所有的HTTP包体,就可以告诉用户请求过大不被接受。会返回413状态码。
  例如,用户试图上传一个1 gb的文件,Nginx在收完包头后,发现内容长度超过client_max_body_size定义的值,
  就直接发送413(请求实体太大)响应给客户端。
  将该数值设置为0,则禁用限制,建议设置为10米。
  
  client_header_buffer_size
  
  设置客户端头部的缓冲大小,建议4 k。
  
  large_client_header_buffers
  
  对于比较大的头(超过client_header_buffer_size)将会使用该部分缓冲区,两个数的值,第一个是个数,第二个是每个缓冲的大小。
  建议设置为4 8 k
  
  open_file_cache
  
  该参数会对以下信息进行缓存:
  打开文件描述符的文件大小和修改时间信息;
  存在的目录信息;
  搜索文件的错误信息(文件不存在无权限读取等信息)。
  格式:open_file_cache max=大小活动=时间;
  马克斯设定缓存文件的数量,不设定经过多长时间文件没被请求后删除缓存。
  建议设置open_file_cache max=102400活动=20年代;
  
  open_file_cache_valid
  
  指多长时间检查一次缓存的有效信息。建议设置为30年代。
  
  open_file_cache_min_uses
  
  open_file_cache指令中的不活跃参数时间内文件的最少使用次数,
  如,将该参数设置为1,则表示,如果文件在不活跃的时间内一次都没被使用,它将被移除。
  建议设置为2。

nginx性能优化及内核参数调整