应对高并发 - TCP/IP网络栈核心参数调优
应对高并发 - TCP/IP网络栈核心参数调优
这可能是你在运维生涯中最常遇到的求助场景:
- “网站一搞促销,流量一上来,Nginx就疯狂报‘Too many open files’错误!”
- “用
netstat
一看,服务器上密密麻麻全是TIME_WAIT
状态的连接,这是不是把资源都耗尽了?” - “压力测试的时候,并发数一高,客户端就开始出现大量的‘Connection Timed Out’,可服务器的CPU和内存明明还很空闲。”
这些现象,都直指Linux网络协议栈的深层参数。别怕,今天我们就把这些“天书”一样的参数,用最通俗的方式讲清楚。
1. TCP连接生命周期:一切调优的基础
要调优网络,我们必须先对TCP连接的建立(三次握手)和断开(四次挥手)有一个宏观的认识。
- 比喻:把它想象成一次严谨的电话通话。
- 三次握手 (建立连接):
- 客户端 -> 服务器 (SYN): “喂,能听到我吗?”
- 服务器 -> 客户端 (SYN/ACK): “听到了,你能听到我吗?”
- 客户端 -> 服务器 (ACK): “我也听到了。” (连接建立,状态进入
ESTABLISHED
)
TIME_WAIT
状态的由来:
当通话结束,主动挂电话的一方(通常是客户端,但Web服务器也会是)会进入TIME_WAIT
状态。
- 三次握手 (建立连接):