Javaのメッセージング・サービスを速くするには?
日本アイ・ビー・エム 東京基礎研究所
アドバイザリー・リサーチャー 上野憲一郎
2008/8/7
本連載は、Javaアプリケーション・サーバの1つである、IBM WebSphere Application Server(以下、WAS)についてのパフォーマンス・チューニングに関する入門記事です。チューニングといっても、実施するエンジニアによって、その方法は異なりますが、本連載はWASを前提とし、かつ80%のケースをカバーすることを目標とします(編集部注:WASのインストールから学びたい読者は、「バージョン別セットアップマニュアル一覧」のWebSphere Application Serverを参照してください)
今回は、JMS(Java Message Service)をサポートするランタイムのパフォーマンス・チューニングについて解説します。WASは、「デフォルトJMSプロバイダー」と呼ばれるJMS実装ランタイムを提供しています。JMS実装ランタイムのパフォーマンス・チューニングのポイントは以下のとおりです(下記リストはインデックスになっています)。
以下、それぞれのチューニング・ポイントについて解説を行います。
【1】JMSデリバリー・モード
JMS 1.1は、「NON_PERSISTENT」と「PERSISTENT」の2つのデリバリー・モードを規定しています。WASのデフォルトJMSプロバイダーは、2つのデリバリー・モードに対して以下の5つの信頼性オプション(「デリバリー・オプション」とも呼ばれます)をサポートしています(表1)。
| 表1 信頼性レベルとパフォーマンス性能 | |
| パフォーマンス | 信頼性レベル |
| 最も速い | ベストエフォート非パーシスタント |
| ↓ | 高速非パーシスタント |
| 高信頼性非パーシスタント | |
| 高信頼性パーシスタント | |
| 最も遅い | 保障パーシスタント |
信頼性とパフォーマンスは、トレードオフの関係にあるので、要件に応じて、適切なオプションを選択することになります。信頼性オプションの詳細については、InfoCenter「メッセージ信頼性レベル」を参照してください。
■ デリバリー・モードの設定
デリバリー・モードの設定は、以下の4カ所で行うことができます。
- JMSクライアント
- デフォルトJMSプロバイダーあて先リソース
- JMSプロバイダー・接続ファクトリにおけるJMSデリバリー・モードと信頼性レベルの対応付け
- バスあて先
以下にそれぞれの設定方法について説明します。
■ 1.JMSクライアントによるデリバリー・モード設定
以下のAPIを使用して、メッセージ・プロデューサー(JMS接続ファクトリ)のデフォルトのデリバリー・モードを設定(PERSISTENTがデフォルト値)できます。
- javax.jms.MessageProducer.setDeliveryMode(int deliveryMode)
上記APIの設定を、「MessageProducer.send()」メソッドで、デリバリー・モードを上書き可能です。
- javax.jms.MessageProducer.send(Destination destination, Message message, int deliveryMode, int priority, long timeToLive)
また、以下のいずれかの値をセットすることにより、デリバリー・モードを指定することもできます。
- Static int javax.jms.DeliveryMode.PERSISTENT
- Static int javax.jms.DeliveryMode.NON_PERSISTENT
詳細は、JMS 1.1 API(JSR 914)を参照してください。
■ 2.デフォルトJMSプロバイダーあて先リソースによるデリバリー・モード設定
JMSプロバイダーのあて先リソースごとにデリバリー・モードを指定します。「アプリケーション」を選択すると、JMSクライアントにおけるデリバリー指定が使用されます。「非パーシスタント」あるいは「パーシスタント」を選択すると、このJMSあて先に対するデリバリー・モードの指定が使用されます(図1)。
![]() |
| 図1 あて先リソースのデリバリー・モード設定 |
■ 3.JMS接続ファクトリ設定におけるJMSデリバリー・モードとWASメッセージングの信頼性モードとの対応付け
JMS接続ファクトリごとに、JMSデリバリー・モード(非パーシスタントおよびパーシスタント)と信頼性モード(ベストエフォート非パーシスタント、高速非パーシスタント、高信頼性非パーシスタント、高信頼性パーシスタント、保障パーシスタント)の対応付けが必要になります(図2)。
![]() |
| 図2 「JMSデリバリー・モード」と「信頼性レベル」の対応付け |
デフォルト設定は、非パーシスタント・デリバリーモードが「高速非パーシスタント」、パーシスタント・デリバリーモードが「高信頼性パーシスタント」に結び付いています(図3)。
![]() |
| 図3 JMS接続ファクトリにおけるサービス品質設定 |
■ 4.バスあて先による指定
デフォルト設定として、「プロデューサーによるデフォルトの信頼性のオーバーライドを可能にする」が指定されています。これによりメッセージ・プロデューサーの指定よりも、バスあて先で指定された信頼性オプションが優先されます(図4)。
![]() |
| 図4 バスあて先におけるサービス品質設定 |
| 1-2-3-4 |
| INDEX | ||
| 第7回 Javaのメッセージング・サービスを速くするには? | ||
| Page1 【1】JMSデリバリー・モード |
||
| Page2 【2】メッセージの永続先(メッセージ・ストア・タイプ) コラム 「データ・ストアとしてDB2を使用する場合のヒント」 |
||
| Page3 【3】データ・バッファ 【4】処理並列度 |
||
| Page4 JMS関連パフォーマンス・チューニングのまとめ サーバ・チューニングに必要なポイントはまだまだある |
||
WebSphereサーバ・チューニング入門 バックナンバー
| Java Solution全記事一覧 |
TechTargetジャパン
- Scalaのパッケージ、アクセス修飾子、オブジェクト継承 (2012/5/22)
インポート、パッケージオブジェクト、抽象クラス/抽象メソッド、オーバーライド、final、シールドクラスなども - 基幹系システムでCloud SQLは使えるか試してみた (2012/5/17)
サンプルとしてMRPシステムを作成して動かし、「再帰呼び出し」などのパフォーマンスを測定して検証してみます - アジャイル管理ツール9選+Pivotal Tracker入門 (2012/5/14)
群雄割拠のアジャイルプロジェクト管理ツールを9つ紹介し、特に注目を集めているPivotal Trackerの基本的な使い方を解説します - サーバサイドJSやJavaでWebアプリが作れるXPages (2012/5/11)
Notes/Dominoの資産をサーバサイドJavaScriptやJavaで操作し、HTMLやJavaScript、CSSをUIにできる技術を紹介
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -




