服务器压力测试心得

在完成一个服务器框架后,进行压力测试时发现实际QPS远低于预期。通过trace和ifstat命令分析,发现锁等待和网络带宽可能是瓶颈。改用无锁队列并未提升性能,最终发现本地机器缺少网络多队列配置,导致CPU利用率低下和丢包问题。在远程服务器上,网卡多队列使得中断分布更均匀,解决了问题,QPS达到预期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近完成了一个服务器框架, 于是测试的他的qps,发现了一个奇怪的问题,测试出来qps只有3w/s,与前面说的10w/s,有很大的差距。使用trace命令打印出glibc函数调用信息,发现了大部分的时间程序处于锁等待状态,我开始怀疑认为是内部使用锁占用太多时间。于是乎改为无锁队列。(关于无锁队列已经记录).修改完毕后,发现了如下几个问题:

1:业务处理线程消耗大量的CPU时间,因为采用了轮询,一直空跑CPU。

2:使用了无锁队列并没有提升qps。

这让不仅陷入了沉思,使用ifstat命令,查看网络流量包,如图:



流量上不去,怀疑是网络带宽问题,局域网内100Mbps,换算单位为12.5m/s,通过文件拷贝测试,不是贷款问题,难道是机器问题。于是乎对测试服务器和本地机器进行比较,

使用lscpu命令查看,配置基本相同。于是跑到远程测试服务器上面去测试,发现qps可以达到10w/s,这下子我更加郁闷了,搜寻了一个下午,还是我的同事提醒了我,网卡不同,使用cat /proc/interrupts 查看中断响应分布,如图:




网卡中断响应分布在一个CPU中,在看看测试服务器的信息:



eth1-TxRx-0是神马意思,百度了一下,叫做网络多队列。这里有8个队列,网络软中断均匀的分布8核中。

原因:

因为测试qps属于IO密集型,这样网卡就会频繁产生网络软中断,但是在本地机器上面没有网卡多队列,使得CPU0的si时间占用到%100,缓冲区满,出现丢包问题,这样ifstat流量根本上不去,那么进程会处于阻塞等待状态。这也是我本地进程CPU占有率上不去的原因,而多队列网卡可以将信号中断分散多个CPU(中断由IRQBlance进行负载均衡)。

结果:

问题得到解决。






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值