System Requirements

HiveMQ is a high-performance MQTT broker that is designed to run on server hardware. Although HiveMQ can also run on embedded devices, server hardware unleashes the full potential of our broker.

Operating Systems

  • Production: Linux is the only operating system that is currently supported for production environments. CentOS7 or other RHEL-based distributions are recommended.

  • Development: Windows, Mac OS X or Linux.

Minimum Hardware Requirements

  • At least 4GB of RAM

  • 4 or more CPUs

  • 100GB or more free disk space.

Environment

  • Production: OpenJDK JRE 11 or newer is required.

  • Development: OpenJDK JDK 11 or newer is recommended.

System resources
HiveMQ scales with your system resources. If you add more CPUs and RAM, HiveMQ delivers higher throughput and lower latencies. The performance of persistent features is bound to the input and output capacity (IO) of the underlying system.

Linux Configuration Optimizations

You can optimise your Linux configuration in several ways:

Increase open file limit

If you run HiveMQ on a Linux operating system, make sure that HiveMQ processes are allowed to open a sufficient number of files. To adjust the limit, add the following lines to the /etc/security/limits.conf file:

hivemq  hard    nofile  1000000
hivemq  soft    nofile  1000000
root    hard    nofile  1000000
root    soft    nofile  1000000

Adjust TCP settings

On systems with many connections, it can be necessary to tweak your TCP configurations and enable the system to open more sockets. To make these adjustments, add the following lines to the /etc/sysctl.conf file:

# This causes the kernel to actively send RST packets when a service is overloaded.
net.ipv4.tcp_fin_timeout = 30

# The maximum file handles that can be allocated.
fs.file-max = 5097152

# Enables fast recycling of waiting sockets.
net.ipv4.tcp_tw_recycle = 1

# Allows reuse of the waiting sockets for new connections, when it is safe from the viewpoint of the protocol .
net.ipv4.tcp_tw_reuse = 1

# The default size of the receive buffers that the sockets use.
net.core.rmem_default = 524288

# The default size of the send buffers that the sockets use.
net.core.wmem_default = 524288

# The maximum size of the received buffers that the sockets use.
net.core.rmem_max = 67108864

# The maximum size of the sent buffers that the sockets use.
net.core.wmem_max = 67108864

# The size of the receive buffer for each TCP connection. (min, default, max)
net.ipv4.tcp_rmem = 4096 87380 16777216

# The size of the sent buffer for each TCP connection. (min, default, max)
net.ipv4.tcp_wmem = 4096 65536 16777216

To apply your changes, type sysctl -p or restart the system.