0
点赞
收藏
分享

微信扫一扫

nginx高并发优化之TCP模块配置

一、概述

http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 60;
send_timeout 15;
}

二、说明

1、sendfile
使用开启或关闭是否使用sendfile()传输文件,普通应用应该设为on,下载等IO重负荷的应用应该设为off,因为大文件不适合放到buffer中
传统文件传输中(read/write方式)在实现上3其实是比较复杂的,需要经过多次上下文切换,当需要对一个文件传输时,传统方式是:
调用read函数,文件数据被copy到内核缓冲区
read函数返回,数据从内核缓冲区copy到用户缓冲区
write函数调用,将文件数据从用户缓冲区copy到内核与socket相关的缓冲区
数据从socket缓冲区copy到相关协议引擎
从上面可以看出来,传统readwrite进行网络文件传输的方式,在过程中经历了四次copy操作。
硬盘->内核buffer->用户buffer->socket相关缓冲区->协议引擎

而sendfile系统调用则提供了一种减少多次copy,提高文件传输性能的方法。流程如下:
sendfile系统效用,文件数据被copy至内核缓冲区
记录数据文职和长度相关的数据保存到socket相关缓存区
实际数据由DMA模块直接发送到协议引擎

未使用sendfile()的传统网络传输过程
硬盘 >> kernel buffer >> user buffer >> kernel socket buffer >> 协议栈
使用sendfile()来进行网络传输的过程
硬盘 >> kernel buffer(快速拷贝到kernel socket buffer) >> 协议栈
senfile()不但能减少切换次数而且还能减少拷贝次数

2、tcp_nopush
TCP/IP网络有一个“小数据包”的问题,如果一条信息中只有一个字符,那么网络可能会堵塞。这样的数据包大小为41字节,其中TCP信头40字
节,内容为1字节。像这种小数据包,它们的开销是4000%。大量的小数据包可以迅速让网络饱和。
John Nagle发明了Nagle算法,它在一定的时间段,将小数据包暂存,将这些小数据包集合起来,整合为一个数据包发送,在下一个时间段又
是如此。这改善了网络传输的效率。时间段通常为200ms。
TCP_NODELAY可以用来关闭Nagle的缓冲算法,将数据尽快地发送(不需要等待200ms)。

3、tcp_nodelay
开启或关闭nginx使用TCP_NODELAY选项的功能,这个选项仅在将连接转变为长连接的时候才被启用
TCP_NODELAAY是禁用Nagle算法,即数据包立即发送出去
由于Nagle和DelayedACK的原因,数据包的确认信息需要积攒到两个时才发送,长连接情况下,奇数包会造成延时40ms,所以TCP_NODELAY
会将ack立刻发出去,如果不在长连接时,可以关闭此模块,因为ack会被立刻发出去

三个指令都开启的好处是,sendfile可以开启高效的文件传输模式,tcp_nopush开启可以确保在发送到客户端之前数据包已经充分“填满”
, 这大大减少了网络开销,并加快了文件发送的速度。 然后,当它到达最后一个可能因为没有“填满”而暂停的数据包时,Nginx会忽略
tcp_nopush参数, 然后,tcp_nodelay强制套接字发送数据。所以三个都开启比开启单个效率更高

4、keepalive_timeout
Httpd守护进程,一般都提供了keep-alive timeout时间设置参数。比如nginx的keepalive_timeout,和Apache的KeepAliveTimeout。
这个 keepalive_timout时间值意味着:一个http产生的tcp连接在传送完最后一个响应后,还需要hold住 keepalive_timeout秒后,才开始关闭
这个连接。当httpd守护进程发送完一个响应后,理应马上主动关闭相应的tcp连接,设置 keepalive_timeout后,httpd守护进程会想说:”再等等
吧,看看浏览器还有没有请求过来”,这一等,便是 keepalive_timeout时间。如果守护进程在这个等待的时间里,一直没有收到浏览发过来http请
求,则关闭这个http连接。

5、send_timeout
设置Nginx服务器响应客户端的超时时间,这个超时时间只针对两个客户端和服务器建立连接后,某次活动之间的时间,如果这个时间后,客
户端没有任何活动,Nginx服务器将关闭连接,将其设置为10s,Nginx与客户端建立连接后,某次会话中服务器等待客户端响应超过10s,就
会自动关闭。

举报

相关推荐

0 条评论