增加网关的负载能力
Increasing the load capacity on Gateway
我试图发送10,000 XML请求连续在while()
循环从客户端到网关(它作为一个服务器到这个客户端)通过UDP传输。网关实现select()
函数调用,监控read_fds。在Gateway中,我传递给select()
的struct timeval
值为:
tv.tv_sec = 5;
tv.tv_usec = 0;
每个XML请求是1500字节,客户端和网关都是用c++编写,二进制文件在Linux (RHEL 5)上运行
有两种情况:
案例1:在客户端,如果我在while()
循环中连续发送10,000个 XML请求,并在每个请求之间使用usleep()
实现500微秒的延迟,网关接受所有10,000个请求,对其进行解析并将请求记录到.log文件中。
案例2:在客户端,如果我在while()
循环中连续发送10,000个 XML请求,没有任何延迟,网关只接受2,600个请求,解析它并将请求记录到.log文件中。
问题:我怎样才能增加?在客户端没有实现延迟的情况下,网关接受了多少请求?另外,请告诉我在案例2中,来自客户端的剩余 7400 请求发生了什么,它们丢失了吗?
如果服务器端接收缓冲区的读取速度不够快,则剩余的消息确实会丢失:这就是UDP的工作方式。
如果您只需要处理10000条消息的突发事件(而不需要处理持续的流量),您可以增加缓冲区大小:sysctl -w net.core.rmem_max=nnnnnnn
。
或者在服务器读循环中花费时间的地方开始分析。例如,你可以删除所有的解析和日志记录作为测试,只计算你收到的消息的数量:如果这帮助你达到一个接近10000的数字,那么它意味着解析和日志记录对于这个循环来说太慢了。
另一件要检查的事情是看看你丢失了哪些消息:如果你在早期的消息中(例如,在前100条消息中)得到持续的消息丢失,那么这意味着路上的其他东西不能这么快地处理消息——在这种情况下,服务器上的接收缓冲区不应该受到指责。
- 具有内存顺序的原子负载存储
- 如何在音频处理中使用超能力时间拉伸类
- 如何使用英特尔 PIN 捕获阵列的所有负载?
- 出色的文件处理能力
- 如何使用boost/beast从HTTP POST请求中解析和提取有效负载?
- 如何从标头确定有效负载大小?
- 错误 - 自定义数据类型作为有效负载,带有提升::几何
- 我应该将哪种有效负载类型发送给webrtc::P ayloadRouter的构造函数?
- 如何在不违反类型别名规则的情况下解释消息负载?
- 如何在 R 负载表中注册 C 符号?
- 顺序一致的原子负载(负载-负载对)是否形成线程间同步点
- 如何在AMD视频卡上获得GPU负载百分比和GPU温度
- 负载是否可以在获取操作下方滑动/存储是否可以漂浮在C++释放上方?
- 控制通过类中的成员函数更改成员变量的能力C++
- OpenMP C++:并行化 for 循环的负载不平衡
- 什么是非时态流式处理负载内部 (_mm256_stream_load_si256) 的浮点 (__m256d) 版本?
- 调整STD ::向量的大小是否可以降低其能力
- 当嵌入python numpy时,延迟负载python dll
- 是通过计算能力1.x的设备中的缓存的全局内存负载/商店
- 增加网关的负载能力