- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个从远程设备收集遥测数据的生产系统。此数据以合理的频率发送,我们最终在高峰时段每秒接收多达数千条消息。每条消息的有效负载约为 80 字节。我开始对各种存储机制进行一些性能测试,但我想首先我会尝试看看在不涉及任何数据存储的情况下我能以多快的速度推送 UDP。我在本地机器上每秒收到大约 70,000 条消息的最大吞吐量测试(如果我使用另一台机器发送测试数据,似乎大致相同)。根据我的粗略计算,考虑到网络链路容量,这比我预期的要低得多。发件人坐在一个紧密的循环中发送数据。我完全了解 UDP re 的所有问题;丢失数据包等。我只是想了解一下我们系统的弱点。
吞吐量这么低是因为包小吗?
马特
private IPEndPoint _receiveEndpoint = new IPEndPoint(IPAddress.Any, _receivePort);
private Stopwatch sw = new Stopwatch();
private int _recievedCount = 0;
private long _lastCount = 0;
private Thread _receiverThread;
private bool _running = true;
_clientReceive = new UdpClient();
_clientReceive.Client.Bind(_receiveEndpoint);
_receiverThread = new Thread(DoReceive);
_receiverThread.Start();
while (_running)
{
Byte[] receiveBytes = _clientReceive.Receive(ref _receiveEndpoint);
_clientReceive.Receive(ref _receiveEndpoint);
if (!sw.IsRunning)
sw.Start();
string receiveString = Encoding.ASCII.GetString(receiveBytes);
_recievedCount = ++_recievedCount;
long howLong = sw.ElapsedMilliseconds;
if (howLong/1000 > _lastCount)
{
_lastCount = howLong/1000;
Invoke(new MethodInvoker(() => { Text = _recievedCount + " iterations in " + sw.ElapsedMilliseconds + " msecs"; }));
}
}
最佳答案
许多小 UDP 数据包肯定会导致网络吞吐量低于您使用较大数据包时获得的网络吞吐量,但是您是否在计算中包括了 IP 和 UDP header 大小?
除此之外,每秒 7 万条消息是非常非常高的,如果最终要部署应用程序,那绝对不是您希望在互联网上发生的事情。即使是每秒数千条消息也很高,如果是我的话,我可能会尝试通过将多个读数捆绑到一个传输中来减少遥测设备的通信。
如果这不是一个选项,并且您在专用网络上并且您需要增加网络吞吐量,您可能必须开始查看您的网卡、它的驱动程序,然后微调一些 Windows 网络参数。但是无论你对这些消息做什么,你几乎肯定会在你对它们进行的任何处理上遇到瓶颈,特别是如果它涉及磁盘,在你达到 70k 消息/秒之前(如果你能得到我会感到惊讶当你用它们做任何有用的事情时,到 10K/秒)。
关于C# UDPClient 不良吞吐量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3597062/
我在使用 Heroku 时遇到问题,当我尝试部署我的应用程序时,它没有运行 run assets:precompile而且我还没有在本地预编译我的 Assets ,我在 Git 中没有 list 文件
(这是为您提供围绕我的问题的背景信息。您可以跳到“问题”并阅读该内容,然后如果您想直接进入主题,则可以返回并浏览背景知识.抱歉,这是一面文字墙!) 我需要将一堆非常非常糟糕的 JSON 存储在数据库中
我是一名优秀的程序员,十分优秀!