系统相关
首页 > 系统相关> > Nginx性能优化-TCP篇

Nginx性能优化-TCP篇

作者:互联网

性能优化方法论

TCP基本知识

三次握手和四次挥手

tcp)

Tcp Fast Open

起到tcp加快通信的作用

listen addres[:port][fastopen=number];

滑动窗口

nginx超时指令和滑动窗口

client_body_timeout time; // 默认60s
send_timeout time; // 默认60s
proxy_timeout timeout; // 默认10m

缓冲区

net.ipv4.tcp_rmem=4096 87380 6291456
net.ipv4.tcp_wmem=4096 16384 4194304
net.ipv4.tcp_mem=1541646 2055528 3083292
net.ipv4.tcp_moderate_rcvbuf=1
net.ipv4.tcp_adv_win_scale=1

应用缓存=buffer/(2^tcp_adv_win_scale)

吞吐量=窗口/时延

BDP=带宽*时延

Nagle算法

作用:

1、避免一个连接上同时存在大量小报文:最多只存在一个小报文,合并多个小报文一起发送

2、提高带宽利用率

tcp_nodelay off; // 吞吐量优先,开启Nagle算法。默认on
tcp_nodelay on; // 低时延优先,禁用Nagle算法。默认on
postpone_output size; // 默认1460

CORK算法

仅针对sendfile on开启时有效,完全禁止小报文的发送,提升网络效率

tcp_nopush on|off; // 默认off开启

拥塞窗口

什么是拥塞窗口?发送方主动限制流量

什么是通告窗口?接收方限制流量

实际流量:拥塞窗口与通告窗口的最小值

拥塞处理:

RTT(Round Trip Time)由物理链路传输时间+末端处理时间+路由器排队处理时间组成。

RTO(Retransmission Time Out)正确的重传之前的丢包

KeepAlive功能

tcp的keepalive和http的keepalive作用是不同的,http是为了复用,tcp则为了尽快释放。

tcp keepalive应用场景:检测实际断掉的连接和用于维持与客户端间防火墙有活跃网络包

linux系统的tcp keepalive:

net.ipv4.tcp_keepalive_time=7200 // 秒
net.ipv4.tcp_keepalive_intvl=75
net.ipv4.tcp_keepalive_probes=9

Nginx的tcp keepalive:

SYN攻击

什么是SYN攻击:攻击者短时间伪造不同IP地址的SYN报文,快速占满backlog队列,使服务器不能为正常用户服务

对SYN攻击防御的内核参数配置

net.core.netdev_max_backlog
listen addres[:port][backlog=number]
net.ipv4.tcp_max_syn_backlog
net.ipv4.tcp_abort_on_overflow
net.ipv4.tcp_syncookies = 1

文件句柄数

linux系统一切皆文件,并发的时候文件句柄数有上限

系统全局

fs.file-max

查看命令:sysctl -a|grep file-max

fs.file-nr=21632 0 40000500

查看命令:sysctl -a|grep file-nr

用户级别

# /etc/security/limits.conf
root soft nofile 65535
root hard nofile 65535

进程级别

worker_rlimit_nofile number; // 默认无

相关配置

net.ipv4.tcp_syn_retries=6
net.ipv4.ip_local_port_range=32768 60999
proxy_connect_timeout time; // 默认是60s
net.ipv4.tcp_max_syn_backlog
net.ipv4.tcp_synack_retries
net.core.netdev_max_backlog = 262144
listen addres[:port][backlog=number]
net.core.somaxconn
net.ipv4.tcp_abort_on_overflow
net.ipv4.tcp_syncookies = 1
worker_connections number; // 默认512
listen addres[:port][fastopen=number];
client_body_timeout time; // 默认60s
send_timeout time; // 默认60s
proxy_timeout timeout; // 默认10m
net.ipv4.tcp_retries1=3
net.ipv4.tcp_retries2=15
tcp_nodelay off; // 吞吐量优先,开启Nagle算法。默认on
tcp_nodelay on; // 低时延优先,禁用Nagle算法。默认on
postpone_output size; // 默认1460
tcp_nopush on|off; // 默认off开启
net.ipv4.tcp_keepalive_time=7200 // 秒
net.ipv4.tcp_keepalive_intvl=75
net.ipv4.tcp_keepalive_probes=9

标签:cwnd,报文,SYN,tcp,Nginx,TCP,net,优化,ipv4
来源: https://www.cnblogs.com/Otiger/p/16220187.html