【发布时间】:2022-12-08 07:04:33
【问题描述】:
我想知道套接字速度是否有限制,我有一个为多个客户端提供服务的服务器(每个客户端都在一个线程上运行),每个客户端发送一个图像,服务器进行一些分析并返回结果。
我让客户端计算 fps 来监控速度,在服务器上的带宽达到 110 MiB/s 之后,无论连接多少个客户端,带宽似乎都没有增加,这导致客户端变慢(我假设是因为客户端无法使用更多带宽,并且在服务器返回对另一个客户端的请求后等待套接字释放)。
我尝试减小发送图像的尺寸,这允许我增加客户端数量(这意味着 CPU 可以同时处理更多客户端),但是当接收到的数据达到 110 MiB/ 时我达到了相同的限制秒。
我尝试使用iperf检查服务器和客户端之间的网络速度,结果是850-1000 Mbits/sec(使用多个设备作为客户端),所以网络连接足够快并且可以处理更多带宽。
我也尝试打开另一个服务实例监听另一个端口,接收带宽仍然停留在 110 MiB/s。
在所有情况下,当我在与服务器相同的机器上打开一个新客户端时,该客户端将比其他客户端快 10 倍以上。这再次意味着服务器可以处理更多的客户端。
这留下了为什么带宽停止在 110 MiB/s 的问题,每个套接字是否允许最大速度?
我知道 python 有模拟多线程的 GIL,CPU 只能解码/处理(不确定正确的术语是什么)110 MiB/s 的传入数据吗?如果是这样,那么当我添加另一个服务器实例并将新客户端连接到新服务器时,为什么它没有增加?为什么它能够在同一台机器上处理客户端?
我试着查看是否有最大套接字带宽限制,我只能找到如何限制(减少)套接字带宽,这与我想做的相反。
以下是一些可能相关的信息:
- Intel i7-10700 在服务器上。
- 服务器上的 Ubuntu 18.04。
- 服务器和客户端连接在同一台交换机上的本地网络上。
- 服务器和客户端正在运行 python 3.6.9
- CPU 在所有内核上以 50% 的速度运行
- 使用 gnome-system-monitor 监控带宽
- 客户端正在运行 Ubntu18.04 和 20.04
【问题讨论】:
标签: python sockets ubuntu-18.04