net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.ip_local_reserved_ports=8080,8081
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
func initTransport() {
// 创建自定义 Transport
transport = &http.Transport{
MaxIdleConns: config.conns * 2, // 创建 Transport 时设置最大空闲连接数
MaxIdleConnsPerHost: config.conns, // 创建 Transport 时设置每个主机最大空闲连接数
IdleConnTimeout: 90 * time.Second, // 创建 Transport 时设置空闲连接超时
}
customDialer := &net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
Control: func(network, address string, c syscall.RawConn) error {
var operr error
err := c.Control(func(fd uintptr) {
// 设置 SO_LINGER 为0,实现优雅关闭
linger := &unix.Linger{
Onoff: 1,
Linger: 0,
}
operr = unix.SetsockoptLinger(int(fd), unix.SOL_SOCKET, unix.SO_LINGER, linger)
if operr != nil {
return
}
// 设置 IP_BIND_ADDRESS_NO_PORT (Linux 4.2+)
// 这个选项允许绑定地址时不预留端口
operr = unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, unix.IP_BIND_ADDRESS_NO_PORT, 1)
})
if err != nil {
return err
}
return operr
},
}
// 更新 transport 使用自定义 dialer
transport.DialContext = customDialer.DialContext
}
backlog
rlimits
queues
232 echo ff > /sys/class/net/ens3/queues/rx-0/rps_cpus
233 echo ff > /sys/class/net/ens3/queues/rx-0/rps_flow_cnt
234 ls /sys/class/net/ens3/queues/
235 echo 4096 > /sys/class/net/ens3/queues/rx-0/rps_flow_cnt
238 echo 32768 > /sys/class/net/ens3/queues/rx-0/rps_flow_cnt