日志打印对性能测试的影响
QA同学反映,对TFS进行压力测试时,网卡一直压不上去,看了下他们的测试环境,发现在测试时客户端的日志都是往屏幕打印的,将日志重定向到文件,压力马上上去了。日志打印到屏幕其实是个非常耗时的事情,打印到屏幕会影响到客户端的请求并发;这个问题解决了,QA同学又反映另一个奇怪的现象。
如下图所示,client1和client2的请求分别被定向到server1和server2。 (4台独立的物理机)
- 单个客户端
- case1:只启动client1,client1不打印日志,server1的网卡能跑到110M/S左右(千兆网卡,接近满)
- case2:只启动client1,client1打印日志,server1的网卡能压到90M/S左右,对比可以看出打印日志的影响
- 两个客户端
- case3:启动client1,打印日志;启动client2,不打印日志;server1网卡压到90MB/S左右,server2网卡压到110MB/S左右
- case4:启动client1,打印日志;启动client2,打印日志;server1的网卡压到40MB/S左右,server2网卡压到40MB/S左右
问题出现了,client1、client2都打印日志时,server1、server2的网卡都只能压到40MB/S,而这两个测试之间是独立的。
分析发现,这两个测试唯一共享的资源就是我工作PC的SecureCRT终端。client1、client2打印到日志,最终是要通过网络传输到我PC上的SecureCRT打印的,case3里日志打印对测试无影响,因为这时传输到SecureCRT的日志量还没有达到影响测试的程度;而case4里两个client都打印时,日志都要传输到SecureCRT,此时PC的网卡就成为瓶颈了,client1、client2打印的日志要等待传输到PC上打印,最终导致client的并发上不去,从而server上的压力上不去。
验证:通过两个不同的PC,分别登录到client1、client2,重新测试case4,结果server1、server2的网卡都能压到90MB/S。
原因真的很坑爹,但通过ssh客户端(secureCRT、xshell、putty等)登录到多个server应该是很常见的工作模式,此时往屏幕打印信息不光对自身有影响,也会影响到其他登录的server,所以性能或压力测试时,强烈建议不要打印日志到屏幕上。