目标
对网络库NewLife.Net进行单机百万级长连接测试,并持续收发数据,检测网络库稳定性。
【2020年8月1日晚上22点】
先上源码:https://github.com/NewLifeX/NewLife.Net
结论,8月1日晚达到200万,8月2日下午达到404万。
上一次百万级压测是2017年4月1日,失败了,只达到84.5万。后来做了一次吞吐量压测。
技术革新
自上一次百万级压测(2017.4.1)以来,网络库进行了诸多细节优化(没有调整架构),特别优化了内存拷贝和多线程操作。
上次购买了20多台高配大数据服务器(16C64G和8C16G),每台发起5万Tcp长连接,纯人肉方式,相当累。这次从泥水佬那里学到本地配置多IP地址建立更多连接的方式,大大节省了服务器资源和人力成本。每台服务器设置20个IP,每个IP发起5万Tcp长连接。
测试程序也从.Net 4.5升级到了.Net Core 3.1,性能提升可观。
服务器资源
阿里云上海区共购买6台12C24G的计算型C5服务器,按照抢占型实例购买,晚上特别便宜。平时3.7每小时的价格,现在0.355就可以拿到。
![e32b07d0dd4943c99b49a9b929ca0c2b.png](https://i-blog.csdnimg.cn/blog_migrate/b018d986f43ecb83e7c1c5e85b8531ea.jpeg)
这次压测对网络要求极高,所以选择的服务器必须有高带宽以及高PPS,务必是同一个机房,便于内网测试。
第一次购买的002因为设置IP失误导致弄残了服务器,不得不释放重新购买。
![f9efb4a1fa3fc27ac88995c4aa454561.png](https://i-blog.csdnimg.cn/blog_migrate/2d02d81db04e8d9eec33ad4b324bf68b.jpeg)
001~004配置多IP花了很长时间,后来才想到用命令批量设置。
默认每个ECS只有一个私网IP,可以再增加9个,一共10个。
经@景洋 提醒,ECS可以通过 绑定弹性网卡,得到20个IP地址,后面的005/002/006都有20个IP。
![53d6ad2791dd2d1b3c6a31f3da7b4aef.png](https://i-blog.csdnimg.cn/blog_migrate/b9157b4ce45662b5dc194e486ff83ba9.jpeg)
环境准备
优化Tcp参数
Windows默认只能使用5000个端口,需要优化Tcp参数设置。
把码神工具拷贝到服务器,直接双击运行,工具->网络调试工具,内容区点击右键,查看Tcp参数,可以看到MaxUserPort是5000,右键还有个“设置最大Tcp”把各个参数值设置为最优。无需重启,直接生效。
码神工具也可以在这里下载,http://x.newlifex.com/XCoder_Install.exe
码神工具源码:https://github.com/NewLifeX/XCoder
![0387624167d8bfec617352a5d1372036.png](https://i-blog.csdnimg.cn/blog_migrate/2ac561364a4401e035d49f66b198ff00.jpeg)
安装.NET Core运行时
.NET Core 3.1.6 也需要拷贝上去安装,或者直接从 http://get.dot.net 下载。服务器网络非常快。
![99db727fe2604767e135d363c6c06a23.png](https://i-blog.csdnimg.cn/blog_migrate/691289dda859a85706ba4e600f736bf6.jpeg)
网卡设置
为了增加每台测试端的连接数,我们需要用netsh命令增加IP地址。这些IP地址来自于ECS设置的辅助私网IP。请一定要申请辅助私网IP以后再去设置网卡,未申请的IP地址可能出问题,第一次购买的002就是这样残废了。
设置主网卡辅助私网IP
![93153884f11f4c405bb860441ac735a2.png](https://i-blog.csdnimg.cn/blog_migrate/1cdb372f630a26802df6a959a926c800.jpeg)
![46755e40fc6d745cfbc793f990bf074d.png](https://i-blog.csdnimg.cn/blog_migrate/5501109043e8900898f6fe72bef1a9dd.jpeg)
设置弹性网卡辅助私网IP
![b0f3bedbad2e0c751ccb7d2cb37c4dca.png](https://i-blog.csdnimg.cn/blog_migrate/1f0acaa377e193c912a76185e6b6c7ba.jpeg)
![41a3a4e2eada4f8df60b0fe1ab6f6076.png](https://i-blog.csdnimg.cn/blog_migrate/b5cf69dd47a0bd9e5f66392f4154a1ad.jpeg)