nginx优化

(一)nginx配置优化

nginx的优化通常会通过nginx配置进行优化,常用的配置如下

  • worker_process 8:配置nginx进程数,通常会按照CPU数量的倍数进行配置
  • worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000:为每个进程分配CPU,可以为进程分配多个CPU,格式为二进制格式
  • worker_rlimit_nofile 65535:nginx进程最多打开的文件描述符数目,理论上为系统最多打开文件那数除以进程数。查看linux最大打开文件数的命令为sysctl -a | grep fs.file
  • use epoll:作用于event的I/O多路复用模型,nginx针对不同的操作系统,拥有不同的时间模型;其中包括
    1. 标准事件模型(如果当前系统不存在更有效的方法,nginx会选择select或poll))
      (1)Select
      (2)poll
    2. 高效事件模型
      (1)Kqueue:使用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X. 使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。
      (2)Epoll: 使用于Linux内核2.6版本及以后的系统。
      (3)/dev/poll:使用于 Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。
      (4)Eventport:使用于 Solaris 10. 为了防止出现内核崩溃的问题, 有必要安装安全补丁。
  • worker_connections 65535:每个进程的最大连接数,理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections
  • keepalive_timeout 60:不限制超时时间,会导致请求堆积,从而导致资源浪费。
  • client_header_buffer_size 4k:客户端请求头的缓存区大小,可以根据系统的分页大小设置,请求头的大小通常不超过1k,一般系统分页大小超过1k,查看系统分页大小命令为getconf PAGESIZE
  • open_file_cache max=65535 inactive=60s:max为文件缓存数量,inactive是指经过多长时间文件没有被请求即删除缓存
  • open_file_cache_valid 80s:设置多长时间检查一次缓存的有效信息
  • open_file_cache_min_uses 1:open_file_cache 指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,它将被移除

(二)nginx内核优化

  • net.ipv4.tcp_max_tw_buckets = 6000:timewait的最大数量,默认值为180000
  • net.ipv4.ip_local_port_range = 1024 65000:允许系统打开的端口范围
  • net.ipv4.tcp_tw_recycle = 1:启用timewait快速回收
  • net.ipv4.tcp_tw_reuse = 1:开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接
  • net.ipv4.tcp_syncookies = 1:开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理
  • net.core.somaxconn = 262144:web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值
  • net.core.netdev_max_backlog = 262144:每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
  • net.ipv4.tcp_max_orphans = 262144:系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)
  • net.ipv4.tcp_max_syn_backlog = 262144:记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128
  • net.ipv4.tcp_timestamps = 0:时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种"异常"的数据包。这里需要将其关掉
  • net.ipv4.tcp_synack_retries = 1:为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量
  • net.ipv4.tcp_syn_retries = 1:在内核放弃建立连接之前发送SYN包的数量
  • net.ipv4.tcp_fin_timeout = 1:如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60秒。2.2 内核的通常值是180秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些
  • net.ipv4.tcp_keepalive_time = 30:当keepalive启用的时,TCP发送keepalive消息的频度。缺省默认为2小时

备注:笔记而已,实际未验证,后续方便自己研究。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值