Object Request Broker (ORB) がワークロード内で使用されているときにはいつでも、この文書内のガイドラインを使用してください。
ORB は、エンタープライズ Bean がリモート・インターフェースを介してアクセスされたときはいつでも使用されています。 CPU 使用量が特に高い、あるいは低いということが起こった場合は、以下のパラメーターのいずれかの値に問題があるかもしれません。 すべてのアプリケーション・デプロイメントに対するコアのチューニング・パラメーターを調べます。
ご使用のワークロードに従って ORB スレッド・プールのサイズを調整します。 中断中のスレッドには、処理の準備ができた作業がないので、避けてください。 スレッドに、処理の準備ができた作業がない場合は、CPU 時間が Object.wait メソッドを呼び出すことによって、コンテキスト・スイッチを実行して消費されます。 スレッド・プール・サイズを調整して、スレッドの待機時間を短くし、アイドル状態が長すぎるために破棄されるのを防止してください。
スレッド・プール・サイズは、ご使用のワークロードおよびシステムによって決まります。 標準の構成では、アプリケーションはプロセッサーごとに 10 またはそれ以下のスレッドを必要とします。
しかし、ご使用のアプリケーションが、データベース・システムへの要求などの非常に遅いバックエンド要求を実行している場合は、サーバー・スレッドはバックエンド要求の完了まで待機することをブロックします。 バックエンド要求を使用している場合は、CPU 使用はかなり低くなります。 この場合、ロードの増加によって CPU 使用またはスループットは増加しません。 スレッド・ダンプは、ほとんどすべてのスレッドが、バックエンド・リソースへの呼び出し内にあることを示しています。 この場合、スループットが改善され、スレッド・ダンプがスレッドがバックエンド・コール以外のほかの領域のランタイム内にあることを表示するまで、プロセッサーごとのスレッドを増加させることを考慮します。 ご使用のバックエンド・リソースが正しく調整されている場合のみ、スレッドの数を調整すべきです。
最大スレッド・サイズを超えたスレッド割り振りを許可 パラメーターはまた、スレッド・プール・サイズにも影響を与えます。しかし、バックエンド・システムを含まない他の作業の処理をせずにバックエンド・システムを待機するすべてのランタイム・スレッドをブロックする原因となるので、バックエンドが長時間停止しない限りこのパラメーターを使用しないでください。
管理コンソール内で、スレッド・プール・サイズの設定を調整することができます。 「サーバー」 > 「アプリケーション・サーバー」 > 「server_name」> 「コンテナー・サービス」> 「ORB サービス」 > 「スレッド・プール」とクリックします。 スレッドの最小数および最大数を調整することができます。 詳しくは、スレッド・プール設定 を参照してください。
ORB がパラメーターを渡す方法を指定します。これが使用可能になっていると、 ORB は、値によるパラメーターの代わりに参照によるパラメーターを渡して、オブジェクト・コピーが行われないようにします。 参照による受け渡しオプションが有効になっていない場合は、 パラメーター・オブジェクトそのものではなく、パラメーターのコピーが渡されます。 この場合、ORB が最初に各パラメーター・オブジェクトのコピーを作成する必要があるため、 コストがかかる可能性があります。
このオプションは、Enterprise JavaBeans (EJB) クライアントと EJB が同一のクラス・ローダーにある場合にのみ使用することができます。 つまり、EJB クライアントと EJB が同一の EAR ファイル内にデプロイされる必要があります。
Enterprise JavaBeans (EJB) クライアントとサーバーが同じ WebSphere Application Server インスタンスにインストールされていて、 かつ、クライアントとサーバーがリモート・インターフェースを使用している場合は、 参照による受け渡しオプションを使用可能にすることで、パフォーマンスを最高 50% 向上させることができます。 参照による受け渡しオプションによってパフォーマンスが改善されるのは、非プリミティブ・オブジェクト・タイプが パラメーターとして渡される場合だけです。 したがって、int および float は、呼び出しモデルに関係なく常にコピーされます。
コマンド行スクリプトを使用する場合、このシステム・プロパティーのフルネームは com.ibm.CORBA.iiop.noLocalCopies です。
データ型 | ブール |
デフォルト | 使用不可 (false) |
リモート・インターフェースでエンタープライズ Bean にこのオプションを使用すると、Enterprise JavaBeans (EJB) 仕様バージョン 2.0 に違反することになります (セクション 5.4 を参照)。Enterprise JavaBeans (EJB) メソッドまたは EJB ホーム・メソッドへ渡されるオブジェクト参照はコピーされず、 破壊を受けやすくなる可能性があります。
Iterator iterator = collection.iterator(); MyPrimaryKey pk = new MyPrimaryKey(); while (iterator.hasNext()) { pk.id = (String) iterator.next(); MyEJB myEJB = myEJBHome.findByPrimaryKey(pk); }
この例では、同じ MyPrimaryKey オブジェクトへの参照が、毎回異なる ID 値で WebSphere Application Server に渡されます。 「参照による受け渡し」を使用可能にしてこのコードを実行すると 、アプリケーション・サーバー内に問題が生じます。これは、複数のエンタープライズ Bean が同じ MyPrimaryKey オブジェクトを参照するためです。 この問題を回避するには、「参照による受け渡し」オプションを使用可能にするときに、 com.ibm.websphere.ejbcontainer.allowPrimaryKeyMutation システム・プロパティーを true に設定します。 「参照による受け渡し」オプションを true に設定すると、EJB コンテナーが PrimaryKey オブジェクトのローカル・コピーを作成します。 ただし、その結果、「参照による受け渡し」オプションを設定することによるパフォーマンス上の利点が少し失われます。
一般に、オブジェクト参照をパラメーターとしてエンタープライズ Bean メソッドまたは EJB ホーム・メソッドに渡すアプリケーション・コードは、念入りに調べて、 そのオブジェクト参照を渡すことにより、データの保全性が失われるなどの問題が生じないかどうかを確認する必要があります。
ご使用のコードを確認後、com.ibm.CORBA.iiop.noLocalCopies システム・プロパティーを true に設定して、 「参照による受け渡し」オプションを使用可能にすることができます。 また、管理コンソールでも「参照による受け渡し」オプションを使用可能にすることができます。 「サーバー」>「アプリケーション・サーバー」>「server_name」>「コンテナー・サービス 」>「ORB サービス」とクリックし、「参照による受け渡し」を選択します。
ORB は、メッセージをフラグメントに分割し 、ORB 接続を介して送信します。com.ibm.CORBA.FragmentSize パラメーターを使用して、 このフラグメントを構成できます。
このメッセージは、ORB がフラグメントを送信したが、 すべてのメッセージが到達する前に送信されるフラグメントが 少なくとも 1 つ残っているということを示します。 Fragment to follow: No の値は、 特定のフラグメントが全メッセージの最後にあることを示しています。メッセージが 1 つのフラグメントに完全に収まる場合には、このフラグメ ントは最初になる場合もあります。
Fragment to follow: Yes が記述されている箇所に進むと、 次の例のようなブロックがあります。
Fragment to follow: | はい |
Message size: | 4988 (0x137C) |
-- | |
Request ID: | 1411 |
この例は、フラグメントのデータ量が 4988 バイトで、 要求 ID が 1411 であることを示します。「Request ID: 1411」と 記述されている個所をすべて検索する場合、その特定メッセージの送信で使用されるフラグメントの数がわかります。関連のあるメッセージ・サイズをすべて加算すると 、ORB を使用して送信されるメッセージ」の合計サイズになります。