High Quality JMS Messaging.

SwiftMQ Performance Profile

Performance Test Suite

The test suite used to create this performance profile consist of 649 classes to perform 390 test blocks with a total of 14'700 single tests. The suite is based on JUnit.

JMS Coverage

The JMS coverage of this performance profile is nearly 100%. That is, every functionality of JMS, except JMS chapter 8 (ConnectionConsumer, XA), was tested under load. In particular this was:

For clearness, recover tests (rollback, recover) are not shown in this profile.

Message Sizes

The test suite performs all tests with small, medium, and large message sizes with BytesMessages with a few message properties for handshaking between producers and consumers. The configured message sizes for the message body are 100 bytes for small messages, 1024 bytes for medium messages, and 5120 bytes for large messages.

Number of Producers and Consumers

Each test was performed with different numbers of producers and consumers, depending on the message model used.

The tests performed with Point-to-Point are:

The tests performed with Publish/Subscribe are:

Block Operations

Block operations are commit, rollback, client-ack, recover. For each of this operation the block size is 10. That is,

Number of Messages

The configured number of messages sent for each test block is 200'000 for small message tests, 150'000 for medium message tests, and 100'000 for large message tests.

Test Environment

Server:

Client:

Network:

SwiftMQ Router:

SwiftMQ Client:

Throughput Measurement

The throughput measured and used in this performance profile is the overall throughput of the message consumers, that is, the number of messages received for the particular test block. For example, a one-to-fifty test shows the overall throughput of all 50 consumers. The measurement is in messages per second.

Results

Publish/Subscribe, Non-Persistent

Test Case Msgs/sec
ps.nonpersistent.nontransacted.autoack.nondurable.singlepair.small 13.781,32
ps.nonpersistent.nontransacted.autoack.nondurable.singlepair.medium 10.244,33
ps.nonpersistent.nontransacted.autoack.nondurable.singlepair.large 4.967,71
ps.nonpersistent.nontransacted.autoack.nondurable.tenpairs.small 30.895,28
ps.nonpersistent.nontransacted.autoack.nondurable.tenpairs.medium 17.969,29
ps.nonpersistent.nontransacted.autoack.nondurable.tenpairs.large 6.231,58
ps.nonpersistent.nontransacted.autoack.nondurable.fiftypairs.small 33.130,71
ps.nonpersistent.nontransacted.autoack.nondurable.fiftypairs.medium 18.690,26
ps.nonpersistent.nontransacted.autoack.nondurable.fiftypairs.large 6.582,14
ps.nonpersistent.nontransacted.autoack.nondurable.onetoten.small 64.274,79
ps.nonpersistent.nontransacted.autoack.nondurable.onetoten.medium 36.569,09
ps.nonpersistent.nontransacted.autoack.nondurable.onetoten.large 12.413,26
ps.nonpersistent.nontransacted.autoack.nondurable.onetofifty.small 113.700,97
ps.nonpersistent.nontransacted.autoack.nondurable.onetofifty.medium 52.275,01
ps.nonpersistent.nontransacted.autoack.nondurable.onetofifty.large 15.212,97
ps.nonpersistent.nontransacted.clientack.nondurable.nonrecover.singlepair.small 12.493,13
ps.nonpersistent.nontransacted.clientack.nondurable.nonrecover.singlepair.medium 9.762,76
ps.nonpersistent.nontransacted.clientack.nondurable.nonrecover.singlepair.large 4.530,22
ps.nonpersistent.nontransacted.clientack.nondurable.nonrecover.tenpairs.small 16.419,28
ps.nonpersistent.nontransacted.clientack.nondurable.nonrecover.tenpairs.medium 11.915,83
ps.nonpersistent.nontransacted.clientack.nondurable.nonrecover.tenpairs.large 4.889,66
ps.nonpersistent.nontransacted.clientack.nondurable.nonrecover.fiftypairs.small 12.167,32
ps.nonpersistent.nontransacted.clientack.nondurable.nonrecover.fiftypairs.medium 8.935,42
ps.nonpersistent.nontransacted.clientack.nondurable.nonrecover.fiftypairs.large 3.937,51
ps.nonpersistent.nontransacted.clientack.nondurable.nonrecover.onetoten.small 24.105,68
ps.nonpersistent.nontransacted.clientack.nondurable.nonrecover.onetoten.medium 18.725,19
ps.nonpersistent.nontransacted.clientack.nondurable.nonrecover.onetoten.large 8.225,44
ps.nonpersistent.nontransacted.clientack.nondurable.nonrecover.onetofifty.small 18.853,33
ps.nonpersistent.nontransacted.clientack.nondurable.nonrecover.onetofifty.medium 15.334,22
ps.nonpersistent.nontransacted.clientack.nondurable.nonrecover.onetofifty.large 6.912,95
ps.nonpersistent.transacted.nondurable.commit.singlepair.small 2.351,49
ps.nonpersistent.transacted.nondurable.commit.singlepair.medium 1.910,49
ps.nonpersistent.transacted.nondurable.commit.singlepair.large 1.446,59
ps.nonpersistent.transacted.nondurable.commit.tenpairs.small 6.719,78
ps.nonpersistent.transacted.nondurable.commit.tenpairs.medium 5.734,18
ps.nonpersistent.transacted.nondurable.commit.tenpairs.large 3.412,11
ps.nonpersistent.transacted.nondurable.commit.fiftypairs.small 6.749,71
ps.nonpersistent.transacted.nondurable.commit.fiftypairs.medium 5.382,36
ps.nonpersistent.transacted.nondurable.commit.fiftypairs.large 2.824,48
ps.nonpersistent.transacted.nondurable.commit.onetoten.small 10.776,79
ps.nonpersistent.transacted.nondurable.commit.onetoten.medium 9.629,09
ps.nonpersistent.transacted.nondurable.commit.onetoten.large 5.974,75
ps.nonpersistent.transacted.nondurable.commit.onetofifty.small 17.162,75
ps.nonpersistent.transacted.nondurable.commit.onetofifty.medium 14.434,68
ps.nonpersistent.transacted.nondurable.commit.onetofifty.large 6.935,69
ps.nonpersistent.nontransacted.autoack.durable.singlepair.small 12.491,88
ps.nonpersistent.nontransacted.autoack.durable.singlepair.medium 9.707,32
ps.nonpersistent.nontransacted.autoack.durable.singlepair.large 4.792,49
ps.nonpersistent.nontransacted.autoack.durable.tenpairs.small 27.388,26
ps.nonpersistent.nontransacted.autoack.durable.tenpairs.medium 16.492,53
ps.nonpersistent.nontransacted.autoack.durable.tenpairs.large 5.956,35
ps.nonpersistent.nontransacted.autoack.durable.fiftypairs.small 27.310,11
ps.nonpersistent.nontransacted.autoack.durable.fiftypairs.medium 16.787,31
ps.nonpersistent.nontransacted.autoack.durable.fiftypairs.large 6.264,37
ps.nonpersistent.nontransacted.autoack.durable.onetoten.small 55.884,03
ps.nonpersistent.nontransacted.autoack.durable.onetoten.medium 32.729,47
ps.nonpersistent.nontransacted.autoack.durable.onetoten.large 11.588,56
ps.nonpersistent.nontransacted.autoack.durable.onetofifty.small 67.906,18
ps.nonpersistent.nontransacted.autoack.durable.onetofifty.medium 37.921,31
ps.nonpersistent.nontransacted.autoack.durable.onetofifty.large 13.613,00
ps.nonpersistent.nontransacted.clientack.durable.nonrecover.singlepair.small 11.672,43
ps.nonpersistent.nontransacted.clientack.durable.nonrecover.singlepair.medium 8.790,82
ps.nonpersistent.nontransacted.clientack.durable.nonrecover.singlepair.large 4.315,37
ps.nonpersistent.nontransacted.clientack.durable.nonrecover.tenpairs.small 15.790,95
ps.nonpersistent.nontransacted.clientack.durable.nonrecover.tenpairs.medium 11.624,46
ps.nonpersistent.nontransacted.clientack.durable.nonrecover.tenpairs.large 4.803,03
ps.nonpersistent.nontransacted.clientack.durable.nonrecover.fiftypairs.small 11.700,38
ps.nonpersistent.nontransacted.clientack.durable.nonrecover.fiftypairs.medium 8.513,02
ps.nonpersistent.nontransacted.clientack.durable.nonrecover.fiftypairs.large 3.792,62
ps.nonpersistent.nontransacted.clientack.durable.nonrecover.onetoten.small 23.017,71
ps.nonpersistent.nontransacted.clientack.durable.nonrecover.onetoten.medium 17.792,80
ps.nonpersistent.nontransacted.clientack.durable.nonrecover.onetoten.large 7.945,15
ps.nonpersistent.nontransacted.clientack.durable.nonrecover.onetofifty.small 18.534,76
ps.nonpersistent.nontransacted.clientack.durable.nonrecover.onetofifty.medium 15.142,41
ps.nonpersistent.nontransacted.clientack.durable.nonrecover.onetofifty.large 6.947,80
ps.nonpersistent.transacted.durable.commit.singlepair.small 2.325,44
ps.nonpersistent.transacted.durable.commit.singlepair.medium 1.900,42
ps.nonpersistent.transacted.durable.commit.singlepair.large 1.434,95
ps.nonpersistent.transacted.durable.commit.tenpairs.small 6.646,26
ps.nonpersistent.transacted.durable.commit.tenpairs.medium 5.815,53
ps.nonpersistent.transacted.durable.commit.tenpairs.large 3.390,50
ps.nonpersistent.transacted.durable.commit.fiftypairs.small 6.643,80
ps.nonpersistent.transacted.durable.commit.fiftypairs.medium 5.256,31
ps.nonpersistent.transacted.durable.commit.fiftypairs.large 2.790,26
ps.nonpersistent.transacted.durable.commit.onetoten.small 10.712,51
ps.nonpersistent.transacted.durable.commit.onetoten.medium 9.637,58
ps.nonpersistent.transacted.durable.commit.onetoten.large 6.073,05
ps.nonpersistent.transacted.durable.commit.onetofifty.small 17.086,62
ps.nonpersistent.transacted.durable.commit.onetofifty.medium 14.145,45
ps.nonpersistent.transacted.durable.commit.onetofifty.large 6.823,67

Point-to-Point, Non-Persistent

Test Case Msgs/sec
ptp.nonpersistent.nontransacted.autoack.singlepair.small 12.864,05
ptp.nonpersistent.nontransacted.autoack.singlepair.medium 9.540,62
ptp.nonpersistent.nontransacted.autoack.singlepair.large 4.653,76
ptp.nonpersistent.nontransacted.autoack.tenpairs.small 27.602,96
ptp.nonpersistent.nontransacted.autoack.tenpairs.medium 16.596,55
ptp.nonpersistent.nontransacted.autoack.tenpairs.large 5.980,11
ptp.nonpersistent.nontransacted.autoack.fiftypairs.small 28.026,18
ptp.nonpersistent.nontransacted.autoack.fiftypairs.medium 16.669,72
ptp.nonpersistent.nontransacted.autoack.fiftypairs.large 6.229,90
ptp.nonpersistent.nontransacted.clientack.nonrecover.singlepair.small 11.925,77
ptp.nonpersistent.nontransacted.clientack.nonrecover.singlepair.medium 8.973,04
ptp.nonpersistent.nontransacted.clientack.nonrecover.singlepair.large 4.316,67
ptp.nonpersistent.nontransacted.clientack.nonrecover.tenpairs.small 16.410,77
ptp.nonpersistent.nontransacted.clientack.nonrecover.tenpairs.medium 11.784,95
ptp.nonpersistent.nontransacted.clientack.nonrecover.tenpairs.large 4.793,31
ptp.nonpersistent.nontransacted.clientack.nonrecover.fiftypairs.small 12.787,80
ptp.nonpersistent.nontransacted.clientack.nonrecover.fiftypairs.medium 8.992,33
ptp.nonpersistent.nontransacted.clientack.nonrecover.fiftypairs.large 3.912,52
ptp.nonpersistent.transacted.commit.singlepair.small 2.377,56
ptp.nonpersistent.transacted.commit.singlepair.medium 1.950,63
ptp.nonpersistent.transacted.commit.singlepair.large 1.450,16
ptp.nonpersistent.transacted.commit.tenpairs.small 6.729,04
ptp.nonpersistent.transacted.commit.tenpairs.medium 5.885,14
ptp.nonpersistent.transacted.commit.tenpairs.large 3.444,70
ptp.nonpersistent.transacted.commit.fiftypairs.small 6.719,85
ptp.nonpersistent.transacted.commit.fiftypairs.medium 5.337,29
ptp.nonpersistent.transacted.commit.fiftypairs.large 2.805,26

Publish/Subscribe, Persistent

Test Case Msgs/sec
ps.persistent.nontransacted.autoack.durable.singlepair.small 1.594,17
ps.persistent.nontransacted.autoack.durable.singlepair.medium 1.526,04
ps.persistent.nontransacted.autoack.durable.singlepair.large 1.061,68
ps.persistent.nontransacted.autoack.durable.tenpairs.small 4.501,88
ps.persistent.nontransacted.autoack.durable.tenpairs.medium 3.994,93
ps.persistent.nontransacted.autoack.durable.tenpairs.large 2.332,63
ps.persistent.nontransacted.autoack.durable.fiftypairs.small 4.431,26
ps.persistent.nontransacted.autoack.durable.fiftypairs.medium 3.952,22
ps.persistent.nontransacted.autoack.durable.fiftypairs.large 2.348,81
ps.persistent.nontransacted.autoack.durable.onetoten.small 4.242,30
ps.persistent.nontransacted.autoack.durable.onetoten.medium 3.802,96
ps.persistent.nontransacted.autoack.durable.onetoten.large 2.376,74
ps.persistent.nontransacted.autoack.durable.onetofifty.small 5.132,67
ps.persistent.nontransacted.autoack.durable.onetofifty.medium 4.591,97
ps.persistent.nontransacted.autoack.durable.onetofifty.large 2.394,69
ps.persistent.nontransacted.autoack.nondurable.singlepair.small 2.585,78
ps.persistent.nontransacted.autoack.nondurable.singlepair.medium 2.435,88
ps.persistent.nontransacted.autoack.nondurable.singlepair.large 1.710,83
ps.persistent.nontransacted.autoack.nondurable.tenpairs.small 7.616,09
ps.persistent.nontransacted.autoack.nondurable.tenpairs.medium 6.859,56
ps.persistent.nontransacted.autoack.nondurable.tenpairs.large 4.180,15
ps.persistent.nontransacted.autoack.nondurable.fiftypairs.small 7.390,88
ps.persistent.nontransacted.autoack.nondurable.fiftypairs.medium 6.190,06
ps.persistent.nontransacted.autoack.nondurable.fiftypairs.large 3.580,68
ps.persistent.nontransacted.autoack.nondurable.onetoten.small 13.027,25
ps.persistent.nontransacted.autoack.nondurable.onetoten.medium 12.396,80
ps.persistent.nontransacted.autoack.nondurable.onetoten.large 7.769,16
ps.persistent.nontransacted.autoack.nondurable.onetofifty.small 24.438,50
ps.persistent.nontransacted.autoack.nondurable.onetofifty.medium 20.831,73
ps.persistent.nontransacted.autoack.nondurable.onetofifty.large 10.533,01
ps.persistent.nontransacted.clientack.durable.nonrecover.singlepair.small 1.470,98
ps.persistent.nontransacted.clientack.durable.nonrecover.singlepair.medium 1.359,10
ps.persistent.nontransacted.clientack.durable.nonrecover.singlepair.large 991,42
ps.persistent.nontransacted.clientack.durable.nonrecover.tenpairs.small 4.053,73
ps.persistent.nontransacted.clientack.durable.nonrecover.tenpairs.medium 3.651,75
ps.persistent.nontransacted.clientack.durable.nonrecover.tenpairs.large 2.184,31
ps.persistent.nontransacted.clientack.durable.nonrecover.fiftypairs.small 2.582,39
ps.persistent.nontransacted.clientack.durable.nonrecover.fiftypairs.medium 2.263,54
ps.persistent.nontransacted.clientack.durable.nonrecover.fiftypairs.large 958,71
ps.persistent.nontransacted.clientack.durable.nonrecover.onetoten.small 3.403,12
ps.persistent.nontransacted.clientack.durable.nonrecover.onetoten.medium 2.912,35
ps.persistent.nontransacted.clientack.durable.nonrecover.onetoten.large 2.058,73
ps.persistent.nontransacted.clientack.durable.nonrecover.onetofifty.small 4.441,27
ps.persistent.nontransacted.clientack.durable.nonrecover.onetofifty.medium 4.046,23
ps.persistent.nontransacted.clientack.durable.nonrecover.onetofifty.large 2.369,97
ps.persistent.nontransacted.clientack.nondurable.nonrecover.singlepair.small 2.333,32
ps.persistent.nontransacted.clientack.nondurable.nonrecover.singlepair.medium 2.039,51
ps.persistent.nontransacted.clientack.nondurable.nonrecover.singlepair.large 1.577,29
ps.persistent.nontransacted.clientack.nondurable.nonrecover.tenpairs.small 7.002,41
ps.persistent.nontransacted.clientack.nondurable.nonrecover.tenpairs.medium 6.439,94
ps.persistent.nontransacted.clientack.nondurable.nonrecover.tenpairs.large 3.793,68
ps.persistent.nontransacted.clientack.nondurable.nonrecover.fiftypairs.small 7.129,04
ps.persistent.nontransacted.clientack.nondurable.nonrecover.fiftypairs.medium 5.859,11
ps.persistent.nontransacted.clientack.nondurable.nonrecover.fiftypairs.large 3.061,23
ps.persistent.nontransacted.clientack.nondurable.nonrecover.onetoten.small 11.346,95
ps.persistent.nontransacted.clientack.nondurable.nonrecover.onetoten.medium 10.409,19
ps.persistent.nontransacted.clientack.nondurable.nonrecover.onetoten.large 6.559,91
ps.persistent.nontransacted.clientack.nondurable.nonrecover.onetofifty.small 17.227,18
ps.persistent.nontransacted.clientack.nondurable.nonrecover.onetofifty.medium 14.197,99
ps.persistent.nontransacted.clientack.nondurable.nonrecover.onetofifty.large 6.912,93
ps.persistent.transacted.durable.commit.singlepair.small 1.645,04
ps.persistent.transacted.durable.commit.singlepair.medium 1.429,53
ps.persistent.transacted.durable.commit.singlepair.large 1.020,41
ps.persistent.transacted.durable.commit.tenpairs.small 5.140,88
ps.persistent.transacted.durable.commit.tenpairs.medium 4.417,61
ps.persistent.transacted.durable.commit.tenpairs.large 2.391,36
ps.persistent.transacted.durable.commit.fiftypairs.small 3.368,15
ps.persistent.transacted.durable.commit.fiftypairs.medium 2.736,19
ps.persistent.transacted.durable.commit.fiftypairs.large 1.000,67
ps.persistent.transacted.durable.commit.onetoten.small 4.362,66
ps.persistent.transacted.durable.commit.onetoten.medium 3.867,36
ps.persistent.transacted.durable.commit.onetoten.large 2.339,43
ps.persistent.transacted.durable.commit.onetofifty.small 4.968,27
ps.persistent.transacted.durable.commit.onetofifty.medium 4.456,16
ps.persistent.transacted.durable.commit.onetofifty.large 2.393,29
ps.persistent.transacted.nondurable.commit.singlepair.small 2.335,56
ps.persistent.transacted.nondurable.commit.singlepair.medium 1.931,43
ps.persistent.transacted.nondurable.commit.singlepair.large 1.415,85
ps.persistent.transacted.nondurable.commit.tenpairs.small 6.739,50
ps.persistent.transacted.nondurable.commit.tenpairs.medium 5.835,94
ps.persistent.transacted.nondurable.commit.tenpairs.large 3.399,22
ps.persistent.transacted.nondurable.commit.fiftypairs.small 6.694,32
ps.persistent.transacted.nondurable.commit.fiftypairs.medium 5.376,15
ps.persistent.transacted.nondurable.commit.fiftypairs.large 2.865,31
ps.persistent.transacted.nondurable.commit.onetoten.small 10.451,61
ps.persistent.transacted.nondurable.commit.onetoten.medium 9.396,24
ps.persistent.transacted.nondurable.commit.onetoten.large 6.031,76
ps.persistent.transacted.nondurable.commit.onetofifty.small 16.476,52
ps.persistent.transacted.nondurable.commit.onetofifty.medium 13.831,09
ps.persistent.transacted.nondurable.commit.onetofifty.large 6.942,84

Point-to-Point, Persistent

Test Case Msgs/sec
ptp.persistent.nontransacted.autoack.singlepair.small 1.646,78
ptp.persistent.nontransacted.autoack.singlepair.medium 1.528,02
ptp.persistent.nontransacted.autoack.singlepair.large 1.102,10
ptp.persistent.nontransacted.autoack.tenpairs.small 4.501,11
ptp.persistent.nontransacted.autoack.tenpairs.medium 4.044,95
ptp.persistent.nontransacted.autoack.tenpairs.large 2.266,50
ptp.persistent.nontransacted.autoack.fiftypairs.small 4.524,29
ptp.persistent.nontransacted.autoack.fiftypairs.medium 4.036,05
ptp.persistent.nontransacted.autoack.fiftypairs.large 2.333,01
ptp.persistent.nontransacted.clientack.nonrecover.singlepair.small 1.472,29
ptp.persistent.nontransacted.clientack.nonrecover.singlepair.medium 1.368,01
ptp.persistent.nontransacted.clientack.nonrecover.singlepair.large 1.015,24
ptp.persistent.nontransacted.clientack.nonrecover.tenpairs.small 4.123,35
ptp.persistent.nontransacted.clientack.nonrecover.tenpairs.medium 3.710,26
ptp.persistent.nontransacted.clientack.nonrecover.tenpairs.large 2.141,47
ptp.persistent.nontransacted.clientack.nonrecover.fiftypairs.small 2.691,60
ptp.persistent.nontransacted.clientack.nonrecover.fiftypairs.medium 2.313,12
ptp.persistent.nontransacted.clientack.nonrecover.fiftypairs.large 934,02
ptp.persistent.transacted.commit.singlepair.small 1.652,20
ptp.persistent.transacted.commit.singlepair.medium 1.470,65
ptp.persistent.transacted.commit.singlepair.large 1.022,09
ptp.persistent.transacted.commit.tenpairs.small 5.270,37
ptp.persistent.transacted.commit.tenpairs.medium 4.509,28
ptp.persistent.transacted.commit.tenpairs.large 2.339,26
ptp.persistent.transacted.commit.fiftypairs.small 3.382,13
ptp.persistent.transacted.commit.fiftypairs.medium 2.770,05
ptp.persistent.transacted.commit.fiftypairs.large 1.010,80