パフォーマンスを図る為にループ回数を変えつつ5回連続して実行させてみます。
5回連続実行の間、MessageBrokerのメッセージクリアせず、TestJmsServer2は順次メッセージの取得を行っています。
TestJmsLoop5.java
-
package test;
-
-
import javax.jms.JMSException;
-
import javax.jms.Message;
-
import javax.jms.Queue;
-
import javax.jms.QueueConnection;
-
import javax.jms.QueueConnectionFactory;
-
import javax.jms.QueueSender;
-
import javax.jms.QueueSession;
-
-
import org.apache.activemq.ActiveMQConnectionFactory;
-
-
public class TestJmsLoop5 {
-
-
for (int i = 0; i <5; i++) {
-
loops();
-
}
-
}
-
-
public static void loops() {
-
-
QueueConnection connection = null;
-
QueueSession session = null;
-
QueueSender sender = null;
-
-
try {
-
QueueConnectionFactory factory = new ActiveMQConnectionFactory("tcp://MessageBrokerのアドレス:61616");
-
connection = factory.createQueueConnection();
-
-
session = connection.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
-
Queue queue = session.createQueue("TestMailQueue");
-
sender= session.createSender(queue);
-
-
connection.start();
-
-
for (int i = 0; i <1000; i++) {
-
TestMessage mailMessage = new TestMessage();
-
mailMessage.setSubject("ActiveMQ test");
-
mailMessage.setFromAddr("tmaru@inter-xxxx.com");
-
mailMessage.setToAddr("tmaru2@inter-xxxx.com");
-
mailMessage.setMessage("メールのテストです。:" + i);
-
-
Message msg = session.createObjectMessage(mailMessage);
-
-
sender.send(msg);
-
}
-
-
} catch (JMSException e) {
-
e.printStackTrace();
-
-
} finally {
-
try {
-
if (sender != null) {
-
sender.close();
-
}
-
if (session != null) {
-
session.close();
-
}
-
if (connection != null) {
-
connection.close();
-
}
-
} catch (JMSException e) {
-
e.printStackTrace();
-
}
-
}
-
-
-
}
-
}
1000ループx5回
-
TestJms:2985
-
TestJms:1890
-
TestJms:1766
-
TestJms:1750
-
TestJms:1609
初期化にコストが掛かっているのか、2回目以降とで若干差が出ていますが、1件辺り1.6m~1.8m位で処理されています。
1万ループx5回
-
TestJms:17047
-
TestJms:45031
-
TestJms:39390
-
TestJms:14813
-
TestJms:36828
1.4m~1.7m辺りは前測定とそう変わりはありません。
合間に3.6m~と波があります。1万件を超えた辺りで記憶領域の拡張等によるコストが発生しているという事でしょうか。
10万ループx5回
-
TestJms:306203
-
TestJms:298610
-
TestJms:311609
-
TestJms:302125
-
TestJms:335469
回数が増えた事で差が薄まりました。
急激に値が変化しない事から、ピーク時は2.9m~3.3m位なのだと考えられます。
送信するメッセージの容量やマシンスペック等々により負荷のタイミングは変わると考えられますが、(50万件までは)件数による大きな性能劣化は見られませんでした。
以下、測定に使用したマシンスペックになります。
MessageBroker&TestJmsServer2
Redhat9 Celeron 1.70Ghz
TestJmsLoop5
WindowsXP Pentium4 3.00Ghz




