高并发服务器注意事项
目录
对于高并发(1万+连接)的服务器,以下是 完整的优化 checklist,涵盖 系统层、网络层、应用层 的关键配置:
1. 系统资源限制
1.1 文件描述符(FD)
# 用户级别(修改 /etc/security/limits.conf)
* soft nofile 100000
* hard nofile 100000
# 系统级别(修改 /etc/sysctl.conf)
fs.file-max = 1000000
- 验证:
ulimit -n和cat /proc/sys/fs/file-max。 
1.2 进程/线程数
# 用户级别(limits.conf)
* soft nproc 60000
* hard nproc 60000
# 系统级别(sysctl.conf)
kernel.pid_max = 200000
2. 网络层优化
2.1 TCP 队列
# SYN 队列(半连接)
net.ipv4.tcp_max_syn_backlog = 65536
# Accept 队列(全连接)
net.core.somaxconn = 65536
# 快速回收 TIME_WAIT(避免端口耗尽)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
- 验证:
netstat -s | grep -i "listen"(检查SYNs dropped)。 
2.2 端口范围
# 扩大客户端端口范围
net.ipv4.ip_local_port_range = 1024 65535
2.3 连接跟踪(Conntrack)
# 增大连接跟踪表(防丢包)
net.netfilter.nf_conntrack_max = 1000000
net.netfilter.nf_conntrack_buckets = 65536
3. 服务器应用层优化
3.1 Go 代码关键配置
// 监听时显式设置 Backlog(必须 >= somaxconn)
ln, err := net.Listen("tcp", ":20007")
if tcpLn, ok := ln.(*net.TCPListener); ok {
    tcpLn.SetDeadline(time.Now().Add(10 * time.Second)) // 避免阻塞
}
// 使用多 Goroutine Accept(CPU 核心数 × 2)
for i := 0; i < runtime.NumCPU() * 2; i++ {
    go acceptConnections(ln)
}
// 连接复用(HTTP 客户端)
var transport = &http.Transport{
    MaxIdleConns:        10000,
    MaxIdleConnsPerHost: 10000,
    IdleConnTimeout:     90 * time.Second,
}
3.2 避免阻塞操作
- I/O 操作:使用非阻塞或异步模式(如 
epoll/kqueue)。 - 日志/DB:异步写入或批量提交。
 
4. 客户端优化
4.1 控制并发量
sem := make(chan struct{}, 10000) // 限制并发量
for i := 0; i < 100000; i++ {
    sem <- struct{}{}
    go func() {
        defer func() { <-sem }()
        conn, err := net.Dial("tcp", "server:20007")
        // 处理错误和重试...
    }()
}
4.2 连接复用
- HTTP:使用 
http.Client连接池。 - TCP:实现自定义连接池(如 
sync.Pool)。 
5. 监控与排查工具
5.1 实时监控
# 查看连接状态
ss -s
netstat -ant | awk '{print $6}' | sort | uniq -c
# 查看 FD 使用
lsof -n | awk '{print $2}' | sort | uniq -c | sort -nr | head
# 抓包分析
tcpdump -i any port 20007 -nn -vv -w dump.pcap
5.2 压测工具
# 使用 wrk/ab 测试
wrk -t16 -c10000 -d30s http://server:20007
# 检查服务器资源
htop
dstat -tcmnd
6. 高级优化(可选)
- 内核调优:
# 减少 TCP 延迟 net.ipv4.tcp_low_latency = 1 # 禁用 Nagle 算法(低延迟场景) net.ipv4.tcp_nodelay = 1 - 多机负载均衡:使用 Nginx/HAProxy 分散连接。
 - SO_REUSEPORT:允许多进程监听同一端口(Linux 3.9+)。
 
总结流程图
高并发服务器优化步骤:
1. 调整系统限制(FD/进程数) → `limits.conf` + `sysctl.conf`
2. 优化 TCP 队列 → `somaxconn` + `tcp_max_syn_backlog`
3. 服务器代码优化 → 多 Goroutine Accept + 非阻塞 I/O
4. 客户端控制 → 限流 + 连接复用
5. 监控 → `ss`/`netstat` + 抓包
按此 checklist 逐步调整后,你的服务器应能稳定支撑 1万+ 并发连接。如果仍有问题,优先检查 SYN 丢弃 和 Accept 队列溢出 的日志!
    Do not communicate by sharing memory; instead, share memory by communicating.

                
            
        
浙公网安备 33010602011771号