The most common reason for excessive memory usage at an MQTT Server is that messages are being stored at the MQTT Server for future delivery.

There are two reasons messages are stored at an MQTT Server:


The chart below summarizes how Quality of Service (QOS), Clean Session flag and Retain Message flag affects what messages are received.

Retain Message flagClean Session flagSubscribe QOSPublish QOSPublished Message Always Received
FalseTrue

0

0No
FalseTrue01 or 2No
FalseTrue1 or 20No
FalseTrue1 or 21 or 2No
FalseFalse00No
FalseFalse01 or 2No
FalseFalse1 or 20No
FalseFalse1 or 21 or 2Yes - all messages
TrueTrue

0

0Yes - last message only for each unique MQTT topic
TrueTrue01 or 2Yes - last message only for each unique MQTT topic
TrueTrue1 or 20Yes - last message only for each unique MQTT topic
TrueTrue1 or 21 or 2Yes - last message only for each unique MQTT topic
TrueFalse00Yes - last message only for each unique MQTT topic
TrueFalse01 or 2Yes - last message only for each unique MQTT topic
TrueFalse1 or 20Yes - last message only for each unique MQTT topic
TrueFalse1 or 21 or 2Yes - all messages

How do I identify which MQTT clients are connecting using 'Clean Session' set to False

MQTT Distributor

By default MQTT Distributor com.cirruslink.chariot.server.core.PacketHandler will log each MQTT client connection as shown below:


A [C] in this message indicates Clean Session = True whilst a [P] indicates Clean Session = False

Chariot

The Chariot UI will display MQTT Client detail under MQTT > Client Status