Skip to content
On this page

用于加速系统内核拷贝文件,传输文件的

sendfile

不使用sendfile模块时的拷贝流程 ==硬盘 -> kernel buffer -> user buffer -> kernel socket buffer -> 协议栈== ![[文件读取.excalidraw]]

使用sendfile模块时将不用再经过用户这一层,从硬盘直接读数据到内核态进行传输,减少切换次数且还能减少拷贝次数 该模块默认是开启的,如下主配置文件中 ![[nginx主配置文件#③ HTTP模块]]

bash
sendfile on|off #模块开关,默认on

tcp_nopush

应用程序每次请求都会发送一个包,典型情况下一个包将包括数据部分和40个字节的包头,如果数据只有1个字节,会很轻易造成资源浪费,容易造成网络拥塞 如果使用nopush,将大大提升网络传输效率,只有数据积累到一定数量才会发送,默认是关闭的,同样在[[nginx主配置文件#③ HTTP模块]]中

bash
tcp_nopush on|off # 默认off

tcp_nodelay

这个选项仅在长连接的情况下才被启用[[nginx连接状态模块#keepalive设置]] tcp_nodelay是禁用Nagle算法,即数据包立即发送出去,如果开启了tcp_nopush,则一般要把tcp_nodelay打开,为了让ack包立马发出去。为什么这么做呢,因为tcp/ip机制,如果没有在规定时间内收到ack包需要进行重传,但是可能因为打开了tcp_nopush造成ack没有即使发出引起不必要的重传。

bash
tcp_no on|off # 默认on