首页 > 解决方案 > MQTT 代理 - CPU 和内存使用过多

问题描述

我有一个 MQTT(Mosquitto) 服务在生产站点的 docker 容器中运行(托管在 AWS EC2 上)。在容器中运行它的原因是为了确保可移植性,因为我们在多个地方使用此服务。

最近,我们一直在观察 MQTT 随着时间的推移,开始消耗大量资源(CPU 和内存),结果发现我们开始丢失通过 QoS 1 通过 MQTT 传输的信息。为了解决这个问题,已经尝试了以下方法:

上述步骤似乎暂时有效,但并不能完全解决问题。我们还进一步增加了可用于 MQTT(EC2 CPU 和内存)的资源数量,但与上述步骤类似,似乎只是将问题推回,而不是解决问题。

你能建议我们解决这个问题的方法吗?此外,如果有人可以建议如何分析 MQTT 代理,对于堆使用、主题、客户端、断开/连接等,这将是有帮助的。

目前,我们使用以下 MQTT 配置文件:

# mount to /mosquitto/config/mosquitto.conf

# sys_interval 60

persistence true
persistence_location /mosquitto/data/

# This causes every change to trigger retained data save
autosave_interval 60
queue_qos0_messages true
store_clean_interval 20
max_queued_messages 100000
max_inflight_messages 10000
allow_anonymous false
password_file /etc/mosquitto/conf.d/passwd
acl_file /etc/mosquitto/conf.d/acl

connection_messages true
log_dest stdout

persistent_client_expiration 1h

注意:我们用来连接 MQTT 代理的客户端是用 NodeJS 和 Python 编写的。对于所有客户端,我们将 clean-session 选项传递为true.

在 Mosquitto 服务器上运行以下命令: mosquitto --help

收到的响应是:

mosquitto version 1.4.12 (build date 2017-06-01 13:03:46+0000)

mosquitto is an MQTT v3.1.1/v3.1 broker.

标签: memory-managementmqttcpu-usagemosquitto

解决方案


推荐阅读