信创操作系统层面tcp短时高并发短连接应当如何调优?

我这当前使用的统信1050e 已经抛弃了tcp_tw_recycle 参数,当前在大量并发短连接环境下,操作系统层面应该怎么优化,会有什么副作用,望有经验的大佬解惑,谢谢!

参与6

2同行回答

howardlee0509howardlee0509联盟成员项目经理金融公司
针对在操作系统层面调优TCP短时高并发短连接的情况,以下是一些可能的调优方法:调整TCP连接参数:调整TCP连接超时时间,以便更快地释放不活跃的连接。调整TCP连接队列大小,以适应高并发连接请求。内核参数调优:增加操作系统的文件描述符限制,以支持更多的并发连接。调整内核的网络...显示全部

针对在操作系统层面调优TCP短时高并发短连接的情况,以下是一些可能的调优方法:

  1. 调整TCP连接参数:
  2. 调整TCP连接超时时间,以便更快地释放不活跃的连接。
  3. 调整TCP连接队列大小,以适应高并发连接请求。
  4. 内核参数调优:
  5. 增加操作系统的文件描述符限制,以支持更多的并发连接。
  6. 调整内核的网络参数,如TCP缓冲区大小,以提高网络性能。
  7. 优化系统资源:
  8. 确保系统具有足够的内存和CPU资源来处理高并发连接。
  9. 使用多核处理器,并考虑使用多线程或多进程来处理连接。
  10. 使用连接池:
  11. 实现连接池以重用已建立的连接,减少连接建立和断开的开销。
  12. 使用事件驱动模型:
  13. 使用事件驱动的框架或库,如Node.js的EventEmitter或Python的asyncio,以有效地处理并发连接。
  14. 使用负载均衡:
  15. 使用负载均衡器来分发连接请求到多个服务器节点,以分担压力并提高可伸缩性。
  16. 优化应用程序代码:
  17. 优化应用程序代码以减少连接建立和断开的次数,尽量减少不必要的资源消耗。
  18. 使用非阻塞IO和异步编程技术,以提高系统的并发性能。
    以上方法可以根据具体情况结合使用,以实现对TCP短时高并发短连接的有效调优。
收起
证券 · 2024-03-22
浏览215
三虎三虎联盟成员系统运维工程师中国邮政储蓄银行
1、调整网卡的ringBuffer大小。接收数据包后,首先会通过DMA引擎将数据送到RingBuffer中。使用ethtool -g <网卡名>可查看RingBuffer的大小。RingBuffer是收发中转站,如果瞬间接收的请求数超过了软中断(ksoftirqd)处理能力,那在RingBuffer填满后,再来的包会被网卡直接丢弃...显示全部

1、调整网卡的ringBuffer大小。接收数据包后,首先会通过DMA引擎将数据送到RingBuffer中。使用ethtool -g <网卡名>可查看RingBuffer的大小。RingBuffer是收发中转站,如果瞬间接收的请求数超过了软中断(ksoftirqd)处理能力,那在RingBuffer填满后,再来的包会被网卡直接丢弃。丢包的统计查询:ethtool -S <网卡名>
2、多队列网卡RSS调优。网卡的每个队列对应一个中断进程,即一个CPU来处理中断,如果队列数越多,也就会有更多的CPU参与到数据包的接收上来。详细信息可查看/proc/interrupts。中断号和CPU的对应关系通过smp_affinity网卡亲和性来控制的,一般通过irqbalance服务来自动管理,即中断进程尽量都使用不同的CPU来poll包。所以通过查看当前配置和支持的最大队列数(ethtool -l <网卡>),来调大网卡队列数(ethtool -L <网卡>),将提高数据接收的性能。
*注意:
这里针对信创环境下的调优需要特别说明!部分国产品牌的CPU,在跨路访问方面,会有高延迟问题,之前在别的回答中也提到,使用NUMA绑定来减少跨路访问。
但在一些批处理高IO的场景下,并不能完全解决问题,网卡队列池满、主机卡顿也会偶尔出现,针对此,关闭irqbalance服务,调整中断进程的亲和性(/proc/irq/<中断号>/smp_affinity),将网卡中断号都固定到一个物理CPU的不同core上,将能避免跨物理CPU的网卡中断。 如主机有2颗CPU,CPU 0对应的core id为0-31,如果主机有64个中断进程,可以对0-31顺序挑选,并写入到/proc/irq/<中断号>/smp_affinity文件中,减少网卡中断的跨路。*
4、合并参数的优化。检查网卡的硬中断合并是否打开(ethtool -c <网卡>),看Adaptive是否为on;接收处理合并是否打开(ethtool -k), 确认receive-offload是否为on;
5、优化软中断一次处理的包数量。内核参数net.cor.netdev_budget来控制,增加这个值,让CPU每次多处理一些网络包接收工作,再让出CPU,以提高效率。
6、使用mmap或sendfile等系统调用来减少用户态和内核态之间的内存拷贝。
7、TCP三次握手优化,在内核参数上,加速端口回收,开启端口重用等,但需要注意在NAT下参数配置防止冲突,可能会因为包的时间戳问题,导致后发送的包先到,进而造成先发的包因为晚到而被丢弃。
8、大招,ebpf可以绕开协议栈的本地网络IO,其实数据包送到网卡,直到送给应用程序这中间的环节好开销还是很多的。那么如果能利用ebpf的sockmap等,将大大提高效率。
9、观测系统资源瓶颈,简单说就是见招拆招,看出现什么问题做对应的性能优化,如半连接队列长度为256,但当前TCP连接中SYN_RECV状态的连接数已经到了256,则说明半连接队列已经溢出了,需要扩大半连接队列长度,那么需要一并考虑backlog、somaxconn和tcp_max_syn_backlog参数。

收起
银行 · 2024-03-30
浏览143

ChatGPT 回答

针对当前使用的统信1050e已经抛弃了tcp_tw_recycle参数,在大量并发短连接环境下,操作系统层面可以考虑以下优化方案:

  1. 调整TCP连接超时时间:可以通过修改TCP连接超时时间来减少TIME_WAIT状态下的连接数。可以通过修改tcp_fin_timeout参数来实现,将其调整为较小的值,如30秒。
  2. 调整TCP连接重用时间:可以通过修改TCP连接重用时间来减少TIME_WAIT状态下的连接数。可以通过修改tcp_tw_reuse参数来实现,将其调整为较小的值,如1秒。
  3. 调整TCP连接队列长度:可以通过修改TCP连接队列长度来减少连接建立失败的情况。可以通过修改tcp_max_syn_backlog参数来实现,将其调整为较大的值,如1024。
  4. 调整TCP连接状态:可以通过修改TCP连接状态来减少TIME_WAIT状态下的连接数。可以通过修改tcp_tw_recycle参数来实现,将其调整为1。

需要注意的是,以上优化方案可能会带来一些副作用,如:

  1. 连接建立失败率可能会增加。
  2. 系统资源消耗可能会增加。
  3. 系统稳定性可能会降低。

因此,在进行优化时需要根据实际情况进行评估和测试,确保优化方案的可行性和稳定性。

提问者

我不要昵称
系统工程师某财产保险
擅长领域: 信创信创云服务器

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2024-03-20
  • 关注会员:3 人
  • 问题浏览:888
  • 最近回答:2024-03-30
  • X社区推广