我们正在尝试使用Azure容器示例和Python Paho-MQTT库运行分布式Locust MQTT测试。我们无法在每个工作线程上运行超过340个客户端。
OSError: [Errno 24] Too many open files.
该故障与以下问题有关:
- https://github.com/eclipse/paho.mqtt.python/issues/183
- https://github.com/eclipse/paho.mqtt.python/issues/662
使用Docker,可以使用--ulimit更改软限制和硬限制,但ACI不接受Docker参数。
我们更改了ACI入口点,以增加运行以下bash脚本时的打开文件软限制:
ulimit -Sn 10000
locust
We added to the locustfile.py:
resource.setrlimit(resource.RLIMIT_NOFILE, (200000, 200000))
我们还尝试使用以下命令:
sudo sysctl -w fs.file-max=500000
sysctl -p
但它返回权限被拒绝错误。
你知道吗?
1条答案
按热度按时间vsaztqbk1#
这不是ACI的问题,而是如何构建Paho-MQTT客户端的问题。Paho使用
select(..)
方法,该方法限制我们打开超过1024个文件描述符。每个MQTT客户端表示3个打开文件描述符:3 * 340 = 1020。超过340个客户端连接,我们达到了1024个打开文件描述符。
我们使用了一个从Paho客户端继承的MQTT用户。我们重写了以下方法来使用eventfd包。