高并发c10m解决方案

c10m问题

解决思路

内核配置

1.修改文件描述符上限
sysctl 修改fs.file-max=12000500或者echo 20000500 > /proc/sys/fs/nr_open或者ulimit -n 20000000
2.sysctl 修改tcp缓冲区大小
net.ipv4.tcp_mem=10000000 10000000 10000000

net.ipv4.tcp_rmem=1024 4096 16384
net.ipv4.tcp_wmem=1024 4096 16384
net.core.rmem_max=16384
net.core.wmem_max=16384

3.修改匹配网络中断/proc/interrupts和cpu亲和性。(smp_affinity )(pthread_setaffinity_np(),/proc/irq/smp_affinity)

4.使用2mb大页,提高tlb命中。修改大页数量,vm.nr_hugepages=30720。

5.每个cpu一个线程

开源解决方案

PF_RING Netmap DPDK
用户态协议栈

需要注意的问题

1.数据结构要注意:如果放在指针里,容易造成频繁cache miss。
2.TCB和Socket和对应的应用程序内存尽量放在一起,并且挂在同一个cpu上。
3.压缩数据并尽量挑小的数据类型保存数据。
4.注意字节填充字节对齐,减少cache失效,假共享问题。
5.内存池的使用,可以为对象,socket,线程为单位分配。
6.包处理可以通过预取。
7.超线程的cpu,注意同一个node的cpu共享L1L2cache。
8.修改 net.core.somaxconn 以及 net.core.tcp_max_syn_backlog
在这里插入图片描述
9.开启 tcp_syncookie 可以防止 syn floor 攻击,同时在 syn_backlog 已满的情况下,不会抛弃 syn 包。
10.tcp_max_tw_buckets
修改系统中处于 timewait 状态的连接的数目
11. tcp_tw_recycle
用于快速回收处于 timewait 的连接。但是它和 timestamp 一起作用时可能会导致同一个 NAT 过来的连接失败。关闭
12.timestamps
为了避免它和 tcp_tw_recycle 一起导致问题。关闭
13.tcp_tw_reuse
允许将 TIME-WAIT sockets 重新用于新的 TCP 连接,效果不是很好。建议开启。
14.tcp_fin_timeout
如果本方关闭连接,则它在 FIN_WAIT_2 状态的时间。建议改为 10。
15.tcp_synack_retries
对于远端的连接请求 SYN,服务器对应的 ack 响应的数目。建议值10。
16.tcp_keepalive_time tcp_keepalive_intvl tcp_keepalive_probes
主要是为了解决 TCP 的 CLOSE_WAIT 问题。
tcp_keepalive_time
防止空连接攻击,可以缩小该值, 建议改为 180
tcp_keepalive_intvl
当探测没有确认时,重新发送探测的频度。缺省是 75 秒。建议改为 30 秒
tcp_keepalive_probes
进行多少次探测,因为探测的间隔是按照指数级别增长,默认为 9 次。建议改为 5 次。
17.ip route 提高拥塞窗口cwnd或者直接改变拥塞算法改成bbr。
18.修改网卡设备的中断数和cpu数一致,并且开启rps负载均衡和使用napi轮询。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值