网络与系统 · 2021年1月29日 0

记一次非生产环境的压力测试

介绍

使用的工具为go-stress-testing-win.exe,作者的github地址:https://github.com/link1st/go-stress-testing,在文章中简单的介绍了常用的一些压测工具,我使用的是作者提供的压测工具。

压测的必要性和意义:https://github.com/link1st/go-stress-testing#2压测

用法如下:https://github.com/link1st/go-https://github.com/link1st/go-stress-testing#12-%E9%A1%B9%E7%9B%AE%E4%BD%93%E9%AA%8Cstress-testing

如何计算压测指标:https://github.com/link1st/go-stress-testing#24-%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97%E5%8E%8B%E6%B5%8B%E6%8C%87%E6%A0%87

发出测试请求的机器,I5-6500,8G内存。

接收请求的机器,Xeon X5675,16G内存

设置

测试前需设置tcp动态端口范围,运行

netsh int ipv4 show dynamicport tcp

查看动态端口范围。修改一下起始端口:

netsh int ipv4 set dynamicport tcp start=2000 num=63000

再次查看,如图

接收机器设置动态端口

测试

当活动连接(Active connections)达到32000左右时,会发生wsarecv: An existing connection was forcibly closed by the remote host。此时的keepalive_timeout为30。在这种情况下,应该是服务器的可用活动连接耗尽导致的,当超过30s后,一些连接被释放,测试又可以继续进行。

上图所示,印证了猜想

最大请求并发数150,请求数为1000,当keepalive_timeout为30时,出现请求失败,如图

测试结果

此时接受的机器cpu占用为8%,内存占用25%。只是简单的并发测试,并没有涉及到数据库的读写操作。