JuggleIM: A Single Node Can Support Tens of Thousands of Concurrent Users

Preface

We recently ran several rounds of performance tests on JuggleIM and would like to share the data here. The performance tests were conducted on a single node, which can serve as the performance baseline for JuggleIM. The performance of the cluster version can be understood as "single-node performance x number of machines". In theory, JuggleIM cluster edition can scale horizontally without limit, so as long as enough machines are available, the cluster version's performance has no theoretical upper bound.

Looking at the stress test results, although single-node performance is sufficient to support tens of thousands of users, we must stay humble in production environments. Please be sure to use the cluster version in production.

The performance tests focused on the following scenarios: number of concurrent online users on a single node, single-chat message concurrency and maximum supported users, group-chat message concurrency and maximum group size.

Stress test environment deployment:

Purpose Server Configuration Operating System Quantity Description
IM Server 4C8G, 100G disk CentOS 7.9 64 bit 1 Deploys the full IM service and its dependent storage
Load Generators 4C8G, 100G disk CentOS 7.9 64 bit Several Runs the client simulator as a load testing tool. Due to the single-machine long-connection limit (50,000/machine), at least 20 load generators are needed to test 1 million concurrent online users

Concurrent Online: A Single Node Easily Supports One Million Concurrent Connections

Data interpretation: Maintaining a single long connection consumes roughly 2k of memory. Therefore, as long as the single machine has more than 2G of available memory, it can support one million long connections. For IM systems, the main pressure is on message concurrency; concurrent online is actually not a big deal.

Test objective: Verify the IM service's concurrent login capability and long-connection retention capability. Long connections must be maintained for at least 30 minutes.

Test method: Use the built-in client simulator in JuggleIM as the load testing tool. Each load generator simulates 50,000 users, performs random logins, and records login latency.

Test results:

Load Generators Total Logged-in Users Throughput Avg. Login Latency (ms) Failure Rate Notes
1 50,000 12175.9 4.71 0.00%
5 250,000 89762.1 13.24 0.00%
10 500,000 113823.4 55.67 0.00%
20 1,000,000 169829.8 385.2 0.00%

Server resource usage:

image

Message Concurrency: A Single Node Can Support Tens of Thousands of Concurrent Users

Data interpretation: From message throughput and concurrency perspective, given message send/receive latency no greater than 1 second — i.e. imperceptible to the human eye — the single-node message-per-second concurrency is no less than 3000. Reaching this level of concurrency requires at least 50,000 concurrent users. Therefore, JuggleIM on a single node can easily support 50,000 concurrent users.

Test objective: Simulate a large number of users using the system simultaneously, with users sending and receiving messages at random, to verify message concurrency and message-receive latency.

Test method: Simulate 50,000 users logging in at the same time. The message senders are randomly selected from these 50,000 users, and the number of selected senders gradually increases, to verify message throughput, success rate, and latency.

Test results:

Total Users Senders Message Size (chars) Message Latency (ms) Throughput Failure Rate Notes
50,000 1,000 100 136 974 0.00%
50,000 2,000 100 332 1863 0.00%
50,000 3,000 100 835 2927.3 0.00%
50,000 5,000 100 1832 4328 0.00%

Server resource usage:

image

Group chat scenario: a single node supports a 50,000-person super group

Data interpretation: In group chat, the pressure is on distributing messages to online group members. For large groups, the ratio of total members to online members is roughly 20:1, and even for very active groups, the ratio does not exceed 10:1. Therefore, with message latency around 1 second, JuggleIM on a single node can support a maximum group size of 50,000.

Note: For super groups (communities), functional degradation is generally applied — disabling read receipts, adding message-send rate limits, disabling multi-device message sync, and other resource-heavy features. With these features turned off, a single group on a single node can support up to 100,000 people.

Test objective: Simulate a realistic 50,000-person large group scenario to verify message throughput and receive latency.

Test method: Create a 50,000-person large group, simulate different scales of online group member interactions, send new messages, receive old messages, and verify message throughput, success rate, and latency.

Test results:

Group Size Online Members Message Concurrency (msg/s) Message Latency (ms) Failure Rate Notes
50,000 1,000 963 185 0.00%
50,000 2,000 1924 563 0.00%
50,000 3,000 2837 1353 0.00%
50,000 5,000 3298 2074 0.00%

Server resource usage:

image

image

Chat Room Scenario: A Single Node Supports a 100,000-Person Live Room with Real-Time Interaction

Data interpretation: JuggleIM on a single node can easily support a chat room with 100,000 concurrent users and real-time interaction.

Test objective: Create a large-scale chat room with concurrent online users, simulate real-time interactions among users, and verify message throughput, success rate, and latency.

Test method: Create a chat room, simulate 10,000 / 20,000 / 50,000 / 100,000 users interacting in real time, and verify message-receive success rate and latency.

Test results:

Concurrent Online Users Message Latency (ms) Throughput Notes
10,000 634 9845 On a single node (4C8G), the difference in performance loss for chat rooms under 100,000 users is small; CPU usage remains below 80%. Message latency is stable — it does not increase as the number of users grows, nor does it decrease as the number of users shrinks.
20,000 589 18872
50,000 597 42396
100,000 753 89327

Server resource usage:

image

image

JuggleIM official site: https://www.jugglechat.com