最近完成了一个服务器框架, 于是测试的他的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 查看中断响应分布,如图: