随着物联网的普及,服务应用将面对大量物联设备处理;早期.NET 在通讯上的处理能力一直给人的印像并不怎样,但.NET Core 经历过大量的优化后在各个模块的处理性能都有着比较出色的提升,针对网络方向的处理模块也有着显著的提升。
以下主要测试.NET Core在不同连接数据并发下的资源吏用情况,用于评估在不同数量连接上服务的处理能力和硬件配置的需求。
测试描述
分别以 200,10 万,50 万,100 万不同连接数下接收数据包和响应的资源使用情况,200 连接情况下通过响应请求方式进行高吞吐压测,后面则模拟设备每 10 秒发送一个数据包。
发送数据如下:
000000123,0002123,00001234,20190430093022,01,020
以上简单地模拟一个设备信息,主要包括 ID,座标,时间和状态信息等,服务端接收后分解消息并返回。服务端处理代码如下:
public override void SessionReceive(IServer server, SessionReceiveEventArgs e)
{
base.SessionReceive(server, e);
var stream = e.Stream.ToPipeStream();
while (stream.TryReadLine(out string line))
{
string[] properties = line.Split(',');
stream.WriteLine(line);
e.Stream.Flush();
}
}
测试环境
-
操作系统
window 2008 server
-
运行环境
dotnet core 2.1
-
硬件资源
CPU E3-1230V2 16G 内存 10Bb 网络
-
测试工具
Tcp TCPBenchmarks
https://github.com/IKende/TCPBenchmarks
200 连接
在小连接的情况其吞吐能力还是非常出色的,在这台 PC 上达到 30 万 rps 的情况还没完全把 CPU 跑满。
10 万连接
测试结果来看,平均并发在 10000RPS;大部分请求都能在 5ms 内响应完成,而程序大部分工作时间 CPU 在 10%以内,内存占用大概 700MB。
50 万连接
测试结果来看在 50 万在线的时候,平均并发在 100000RPS;大部分请求同样在 5ms 内响应完成,程序大部分工作时间的 CPU 在 20%以内,内存占用大概在 3.5G
100 万连接
100 万在线的时候,平均并发在 100000RPS;大部分请求同样在 100ms 内响应完成,程序大部分工作时间的 CPU 在 40%以内,内存占用大概在 7-9G.不过这次测试的延时相对比较高,由于负载量的情况测试端也会引起延时的问题,所以导致整体延时比较高。
总结
以上测试的服务器的 CPU 比较旧,已经是 6 年前的老产品,但在这个 CPU 的支持下运行 100 万连接处理也不算存在压力。
其主要原因还是整体的 RPS 并不高,当在 100 万连接的情况吞吐值在 10 万 RPS;这样也可以说明在网络服务中占 CPU 资源的是请求的响应量而不是在线的连接数,不过当在线连接数比较多的情况还是需要占用大量的内存;所以在制是定硬件规划的时候可以针对在线连接数和请求量进行一个结合规划。
转自:smark
cnblogs.com/smark/p/10846422.html