设为首页 收藏本站
查看: 920|回复: 0

[经验分享] NGINX高性能Web服务器详解(读书笔记)

[复制链接]

尚未签到

发表于 2017-12-23 14:20:29 | 显示全部楼层 |阅读模式
  原文地址:NGINX高性能Web服务器详解(读书笔记) 作者:夏寥寥
  第4章  Nginx服务器的高级配置
  4.1 针对IPv4的内核7个参数的配置优化
  说明:我们可以将这些内核参数的值追加到Linux系统的/etc/sysctl.conf文件中,然后使用如下命令使修改生效:
  /sbin/sysctl -p
  (1)net.core.netdev_max_backlog参数
  表示当每个网络接口接收数据包的速度比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目。默认值为128.
  Nginx服务器中定义的NGX_LISTEN_BACKLOG的默认值为511.
  (2)net.core.somaxconn参数
  该参数用于调节系统同时发起的TCP连接数,默认值为128.在客户端存在高并发请求的情况下,该默认值较小,可能导致链接超时或者重传问题,我们可以根据实际需要结合并发请求数来调节此值。
  (3)net.ipv4.tcp_max_orphans参数
  该参数用于设定系统中最多允许存在多少TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,没有与用户文件句柄关联的TCP套接字将立即被复位,同时给出警告信息。这个限制只是为了防止简单的Dos攻击。
  (4)net.ipv4.tcp_max_syn_backlog参数
  该参数用于记录尚未收到客户端确认信息的连接请求的最大值。对于128MB内存的系统来说,默认值是1204。小内存系统是128.
  (5)net.ipv4.tcp_timestamps参数
  该参数用于设定时间戳,可避免序列号的卷绕。当此值赋值为0时,禁用对于TCP时间戳的支持。对于Nginx服务器来说,建议关闭。
  (6)net.ipv4.tcp_synack_retires参数
  该参数用于设置内核放弃TCP连接之前向客户端发送SYN+ACK包的数量,一般赋值为1.
  (7)net.ipv4.tcp_syn_retires参数
  与上个参数类似,该参数设置内核放弃建立连接之前发送SYN包的数量,一般赋值为1.
  4.2针对CPU的Nginx配置优化的2个指令
  (1)work_process指令
  用来设置nginx服务器的进程数。一般设置和CPU的核心数相同,或者倍数。
  (2)work_cou_affinity指令
  该指令用来为每个进程分配COU的工作内核。
  4.3与网络连接相关配置的4个指令
  (1)keepalive_timeout指令
  用来设置Nginx服务器与客户端保持连接的超时时间。有2个设置选项,中间用空格隔开。
  第一个选项指定客户端与连接保持活动的超时时间,在这个时间之后,服务器会关闭此连接;
  第二个选项可选:指定了使用Keep_Alive消息头保持活动的有效时间,如果不设置它,Nginx服务器不会向客户端发送Keep_Alive消息头以保持与客户端某些浏览器的连接,超过设置的时间后,客户端就可以关闭连接,不需要服务器关闭了。
  (2)send_timeout指令
  用于设置Nginx服务器响应客户端的超时时间,这个超时时间仅针对两个客户端和服务器之间建立连接后,某个活动之间的时间,如果这个时间后客户端没有任何活动,Nginx服务器将会关闭连接。
  (3)client_header_buffer_size指令
  用于设置Nginx服务器允许的客户端请求头部的缓冲区大小,默认为1kb.此指令可根据系统分页大小来设置。获取分页大小的命令:getconf PAGESIZE
  Nginx出现400错误,很大一部分情况是客户端的请求头部过大造成的。设置请求头部大小:
  client_header_buffer_size 4k;
  (4)multi_accept指令
  用于配置Nginx服务器是否尽可能多的接收客户端的网络连接请求。默认值为off.
  4.4与事件驱动模型相关的配置的8个指令
  (1)use指令
  用于指定Nginx服务器使用的事件驱动模型;
  (2)worker_connections指令
  用于设置Nginx服务器的每个工作进程允许同时连接客户端的最大数量。
  Client=worker_processes * worker_connections/2.
  (3)worker_rlimit_sigpending指令
  用于设置Linux 2.6.6版本之后Linux平台的事件信号队列长度上限。它主要影响事件驱动模型中rtsig模型可以保存的最大信号数。
  (4)devpoll_changes和devpoll_events指令
  用于设置在/dev/poll事件驱动模型下Nginx服务器可以与内核之间传递事件的数量。前者设置传递给内核的事件数量,
  后者设置从内核获取的事件数量。默认值为32
  (5)kqueue_changes和kquue_events指令
  用于设置在kqueue事件驱动模型下Nginx服务器可以与内核之间传递事件的数量。前者设置传递给内核的事件数量,
  后者设置从内核获取的事件数量。默认值为512.
  (6)epoll_events指令
  用于设置在epoll事件驱动模型下Nginx服务器可以与内核之间传递事件的数量。默认值为512.
  注意:与其他事件驱动模型不同,epoll模型下Nginx服务器向内核传递事件的数量和从内核获取的事件数量是相等的。所以,
  不存在epoll_changes指令。
  (7)rtsig_signo指令
  用于设置rtsig模式使用的2个信号中的第一个,第二个信号是在第一个信号的编号上加1.默认的第一个信号设置为:
  SIGRTMIN+10
  (8)rtsig_overflow_*指令
  该指令有3个具体的指令,rtsig_over_events、rtsig_over_test、rtsig_over_threshold指令。这些指令用来控制当rtsig模式中信号队列溢出时Nginx服务器的处理方式。
  rtsig_over_events:指定队列溢出时使用poll库处理的事件数,默认值为16.
  tsig_over_test:指定poll库处理完第几件事后将清空rtsig模型使用的信号队列,默认值为32.
  tsig_over_threshold:指定rtsig模式使用的信号队列中的事件超过多少时就需要清空队列了。该指令只对Linux 2.4.x以下版本有效。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-427174-1-1.html 上篇帖子: 仙音小队长 下篇帖子: nginx重新编译添加新模块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表