IBM Lotus Connections のデプロイ: インストール後のチューニング

この記事は IBM Lotus Connections のデプロイに関する 7 部構成の記事の第 2 部であり、インストール後のチューニングのヒントに焦点を当て、デプロイメントが一般的なパフォーマンスの落とし穴に陥らないようにします。Lotus Connections の初期インストール完了後に実行する推奨プラクティスについて、エキスパートから学びましょう。

Luis Benitez, Senior I/T Specialist, IBM

Luis Benitez is a Senior I/T Specialist with IBM Software Services for Lotus. Luis has been working on early adopter customer deployments of IBM Lotus Connections since January 2007. He joined IBM Software Services in early 2004, and prior to that he worked on the IBM Lotus LearningSpace and IBM Lotus Learning Management system product development teams. You can reach Luis at Luis_Benitez@us.ibm.com.



2007年 9月 11日 (初版 2007年 7月 31日)

この記事では、IBM Lotus Connections のインストール後に実行する最も一般的な手順について説明します。データベース、LDAP ディレクトリー、Web サーバー、およびアプリケーション・サーバーなど、Lotus Connections の実行に必要なすべてのコンポーネントをハイレベルで考慮します。この記事では、一般的ないくつかのチューニング・パラメーターの概要を取り上げ、どの構成属性がシステム全体のパフォーマンスに影響するのかをお客様および I/T スペシャリストにわかりやすく示します。

はじめに

この記事では、Lotus Connections デプロイメントのパフォーマンスを改善するために強く推奨される、インストール後のオプションのタスクについて概要を説明します。この記事では、さまざまなインフラストラクチャー・コンポーネントのパフォーマンスを個別に最適化するヒントを取り上げます。この記事は Lotus Connections に特化していますが、ほとんどのヒントはどの J2EE Web アプリケーションにもあてはまります。

推奨プラクティスは、Web サーバー、アプリケーション・サーバー、LDAP サーバー、およびデータベース・サーバーのパフォーマンスを最適化する方法を示します。


Web サーバーのパフォーマンスの最適化

このセクションでは、HTTP サーバーが Lotus Connections デプロイメントのボトルネックとならないようにするためのさまざまなヒントを説明します。

プラグインの最適化

IBM WebSphere Application Server は、Web サーバー用のプラグインを生成します。たとえば、IBM HTTP Server の場合、このファイルは通常 \<IHS_INSTALL_ROOT>\Plugins\config\webserver1\plugin-cfg.xml にあります。プラグインの最初の 2 行は、リスト 1 で示したコードに類似しているはずです。

リスト 1. Plugin-cfg.xml の最適化
<Config ASDisableNagle="false" AcceptAllContent="false" AppServerPortPreference=
"HostHeader" ChunkedResponse="false" FIPSEnable="false" 
IISDisableNagle="false" IISPluginPriority="High" IgnoreDNSFailures="false" 
RefreshInterval="60" 
ResponseChunkSize="64" VHostMatchingCompat="false">
   <Log LogLevel="Error" 
   Name="C:\IBM\HTTPServer\Plugins\logs\webserver1\http_plugin.log"/>

コード・リスト内の太字で示した要素に注目してください。まず、RefreshInterval パラメーターは、プラグインをどれぐらいの頻度で再ロードしなければならないのかを Web サーバーに伝えます。この情報は、多数のアプリケーションが複数のアプリケーション・サーバーにわたってデプロイされているときに役立ちます。しかし、アプリケーションのデプロイメントが制限されている場合は、それに応じてこのパラメーターを調整してください。デフォルトでは、この値は 60 秒に設定されています。実動に適した値は 3600 秒 (1 時間) です。

次に、LogLevel パラメーターは、ログ出力をどれぐらい詳細にするのかを Web サーバーに伝えます。デフォルトでは、このレベルは Error に設定され、実動ではこの値のままにしておいてください。値を Trace に設定すると、最高レベルのログ出力が得られ、トラブルシューティングに適していますが、Web サーバーのパフォーマンスは大幅に低下します。

ログの最適化

Web サーバーとして IBM HTTP Server を使用する場合、デフォルトでは、Web サーバーから要求されたすべてのファイルがファイル・システムにログとして記録されることに注意してください。これは、ユーザーがページを訪問するたびに、すべてのイメージ、CSS ファイル、JSP、HTML などの要求がログに記録されることを意味します。ユーザーが Lotus Connections を使用すればするほど、このログ・ファイルは大幅に増加し、ディスク・スペースを消費し、コンテンツをユーザーに配信するプロセスの速度が低下します。

この潜在的なボトルネックを回避するには、次の手順にしたがいます。

  1. Web サーバーに管理者としてログインします。
  2. IHS config ディレクトリー (たとえば、/opt/IBMHttpServer/conf) を開きます。
  3. httpd.conf ファイルのコピーを保存します。
  4. テキスト・エディターで httpd.conf を開きます。
  5. 次の行を見つけます。

    CustomLog logs/access.log common
    この行を次のように変更します。

    #CustomLog logs/access.log common

この行をコメント化することにより、すべての要求をファイル・システムへ保存しないよう Web サーバーに伝えます。

静的要素を Web サーバーに移動する

デプロイメント・トポロジーの各サーバーは、それぞれ専用の目的を持っています。Lotus Connections は LDAP ディレクトリーを排他的に使用し、他のエンタープライズ・アプリケーションが必要とするデータを保存します。データベース・サーバーは、アプリケーション・データを保存するために排他的に使用されます。Web サーバーは、静的コンテンツを提供したり、アプリケーション・サーバーへのプロキシーとして機能するために、排他的に使用されます。

アプリケーション・サーバー (この場合は WebSphere Application Server) は、Lotus Connections のコアが実行される場所であり、すべてのアプリケーションおよびビジネス・ロジックを保持しています。データベースへの照会はアプリケーション・サーバーから行われ、ここでは、表示用にデータの操作および編成も行われます。また、アプリケーション・サーバーはデータのビューを動的に構築するロジックを保持しています。このように、アプリケーション・サーバーは多数の処理サイクルを使用します。

アプリケーション・サーバーは、イメージ、CSS(カスケード・スタイル・シート)、JavaScript ファイルといった静的コンテンツ (つまり、変わらないコンテンツ) を提供するため使用されることがあります。しかし、静的コンテンツは Web サーバーが提供しなければなりません。静的コンテンツは変わらないものであり、Web サーバーは静的データを保存しネットワークを介して提供するよう専用に設計されているからです。

静的コンテンツがアプリケーション・サーバーに残っていると、ネットワークの貴重な帯域幅も使用されます。この場合、静的コンテンツをアプリケーション・サーバーから Web サーバーに送信し、さらにこのコンテンツを Web サーバーからユーザーに送信しなければなりません。しかし、ここでは Web サーバーを仲介者として動作させる必要はありません。

したがって、パフォーマンスを改善するには、静的な Web コンテンツを Web サーバーに移動します。あるいは、キャッシュ・プロキシーを使用して、毎回アプリケーション・サーバーから静的要素を取得しないようにします。

Lotus Connections は、その静的コンテンツを各機能 (たとえば、プロフィール) の一部として配布します。以下のサブセクションでは、キャッシュ・プロキシーを使用しない場合に、Lotus Connections の各機能ごとに、静的コンテンツを Web サーバーに移動する方法について説明します。アプリケーション・サーバーと Web サーバーは 2 つの異なる物理サーバーに置かれているものと仮定します。そうでない場合は、以下の手順を実行しても、意味のあるパフォーマンスの改善は得られません。


アクティビティー用の静的コンテンツ

アクティビティー機能用の静的コンテンツをアプリケーション・サーバーから Web サーバーに移動するには、次の手順にしたがいます。

  1. Web サーバーに管理者としてログインします。
  2. IBM HTTP Server の ドキュメントのRootディレクトリー (たとえば、/opt/IBMHttpServer/htdocs/en_US) を開きます。
  3. activities というディレクトリーを作成します。
  4. 新たに作成したこのディレクトリー内に、nav というサブディレクトリーを作成します。これで、次のようなディレクトリー構造が得られます。

    /opt/IBMHttpServer/htdocs/en_US/activities/nav
  5. アプリケーション・サーバーの /opt/WAS/profiles/<profileName>/installedApps/<cellName>/Activities.ear/sn-nav.war から images ディレクトリーおよび templates ディレクトリーを、手順 4 で作成した /activities/nav フォルダーにコピーします。また、sn-nav.war ディレクトリー内のすべての HTML ファイルおよび GIF ファイルをコピーします (図 1 参照)。
図 1. Web サーバーにコピーされたアクティビティーの navbar 静的コンテンツ
Web サーバーにコピーされたアクティビティーの navbar 静的コンテンツ
  1. 通常は /<IHS_INSTALL_ROOT>/Plugins/config/webserver1 にある plugin-cfg.xml を開きます。
  2. 次の行を見つけます。

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/activities/nav/*"/>
    この行をリスト 2 に示すコードに置き換えます。
リスト 2. アクティビティーの Nav Bar を最適化する Plugin-cfg.xml エントリー
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid"
 Name="/activities/nav/header.js"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/activities/nav/custom.css"/>
  1. これで、アクティビティーのナビゲーション・バー (navbar) 用の静的ファイルが Web サーバーにコピーされました。アクティビティーの残りの静的コンテンツについても、同様の手順を実行する必要があります。
  2. アプリケーション・サーバーの /opt/WAS/profiles/<profileName>/installedApps/<cellName>/Activities.ear/oawebui.war から手順 4 で作成した /activities フォルダーに、activities_help、activities_help_old、images、images_old、javascript、javascript3、movie、rte、および stylesheet の各ディレクトリーをコピーします。
  3. 通常は /<IHS_INSTALL_ROOT>/Plugins/config/webserver1 にある plugin-cfg.xml を開きます。
  4. 次の行を見つけます。

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/activities/*"/>
    この行をリスト 3 に示すコードに置き換えます。
リスト 3. アクティビティーのアプリケーションを最適化する Plugin-cfg.xml エントリー
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/activities"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/activities/"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/activities/j_security_check"/>

<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/activities/*.jsp"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/activities/auth/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/activities/bookmarklets/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/activities/email/*"/>
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
 Name="/activities/error/*"/>
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
 Name="/activities/firefox/*"/>
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
 Name="/activities/notesplugin/*"/>
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
 Name="/activities/templates/*"/>
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
 Name="/activities/service/*"/>

これで、アクティビティーのすべての静的コンテンツが Web サーバーにコピーされました (図 2 参照)。プラグインは、特定のトラフィック (たとえば、*.jsp) だけをアプリケーション・サーバーに転送するよう構成されました。Lotus Connections の他の機能についても同様の手順が必要です。これを次のセクションで簡単に説明します。

図 2. Web サーバーにコピーされたアクティビティーの静的コンテンツ
Web サーバーにコピーされたアクティビティーの静的コンテンツ

ブログ用の静的コンテンツ

ブログ機能用の静的コンテンツをアプリケーション・サーバーから Web サーバーに移動するには、次の手順にしたがいます。

  1. Web サーバーのドキュメント・ルートに、blogs というディレクトリーを作成します。
  2. 新たに作成したこのディレクトリー内に、nav というサブディレクトリーを作成します。これで、/opt/IBMHttpServer/htdocs/en_US/blogs/nav というディレクトリー構造が得られます。
  3. アプリケーション・サーバーの /opt/WAS/profiles/<profileName>/installedApps/<cellName>/Blogs.ear/sn-nav.war から images ディレクトリーおよび templates ディレクトリーを、手順 2 で作成した /blogs/nav フォルダーにコピーします。また、sn-nav.war ディレクトリー内のすべての HTML ファイルおよび GIF ファイルをコピーします。
  4. 通常は /<IHS_INSTALL_ROOT>/Plugins/config/webserver1 にある plugin-cfg.xml を開きます。
  5. 次の行を見つけます。

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/blogs/nav/*"/>
    この行をリスト 4 に示すコードに置き換えます。
リスト 4. ブログの Nav Bar を最適化する Plugin-cfg.xml エントリー
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid"
 Name="/blogs/nav/header.js"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/nav/custom.css"/>
  1. アプリケーション・サーバーの /opt/WAS/profiles/<profileName>/installedApps/<cellName>/Blogs.ear/blogs.war から手順 2 で作成した /blogs フォルダーに、images、roller-ui、theme、および themes の各ディレクトリーをコピーします。また、blogs.war ディレクトリーから favicon.ico および robots.txt をコピーします。
  2. 通常は /<IHS_INSTALL_ROOT>/Plugins/config/webserver1 にある plugin-cfg.xml を開きます。
  3. 次の行を見つけます。

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/blogs/*"/>
    この行をリスト 5 に示すコードに置き換えます。
リスト 5. ブログのアプリケーションを最適化する Plugin-cfg.xml エントリー
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/j_security_check"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/home/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/services/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/*.jsp"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/*.do"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/comments/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/language/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/resources/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/rsd/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/flavor/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/rss/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/atom/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/page/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/search/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/xmlrpc/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/editor/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/admin/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/planetrss/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-ui/*.jsp"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-ui/authoring/preview/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-ui/authoring/previewresource/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-ui/authoring/thumbnail/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-ui/authoring/userdata/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-ui/blog/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-ui/myblogs/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-ui/rendering/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/blogs/roller-services/*"/>

コミュニティー用の静的コンテンツ

コミュニティー機能用の静的コンテンツをアプリケーション・サーバーから Web サーバーに移動するには、次の手順にしたがいます。

  1. Web サーバーのドキュメント・ルートに、communities というディレクトリーを作成します。
  2. 新たに作成したこのディレクトリー内に、nav というサブディレクトリーを作成します。これで、次のようなディレクトリー構造が得られます。 /opt/IBMHttpServer/htdocs/en_US/communities/nav
  3. アプリケーション・サーバーの /opt/WAS/profiles/<profileName>/installedApps/<cellName>/Communities.ear/sn-nav.war から images ディレクトリーおよび templates ディレクトリーを、手順 2 で作成した /communities/nav フォルダーにコピーします。また、sn-nav.war ディレクトリー内のすべての HTML ファイルおよび GIF ファイルをコピーします。
  4. 通常は /<IHS_INSTALL_ROOT>/Plugins/config/webserver1 にある plugin-cfg.xml を開きます。
  5. Find the following line:

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/communities/nav/*"/>
    この行をリスト 6 に示すコードに置き換えます。
リスト 6. コミュニティーの Nav Bar を最適化する Plugin-cfg.xml エントリー
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
 Name="/communities/nav/header.js"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities/nav/custom.css"/>
  1. アプリケーション・サーバーの /opt/WAS/profiles/<profileName>/installedApps/<cellName>/Communities.ear/tango.web.ui.war から手順 2 で作成した /communities フォルダーに、help、images、javascript、movies、rte、および stylesheets の各ディレクトリーをコピーします。
  2. 通常は /<IHS_INSTALL_ROOT>/Plugins/config/webserver1 にある plugin-cfg.xml を開きます。
  3. 次の行を見つけます。

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/communities/*"/>
    この行をリスト 7 に示すコードに置き換えます。
リスト 7. コミュニティーのアプリケーションを最適化する Plugin-cfg.xml エントリー
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities/"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities/j_security_check"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities/*.jsp"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities/*.do"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities/service/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities/javlin/*"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/communities/xmlProxy/*"/>

ドッグイア用の静的コンテンツ

ドッグイア機能用の静的コンテンツをアプリケーション・サーバーから Web サーバーに移動するには、次の手順にしたがいます。

  1. Web サーバーのドキュメント・ルートに、dogear というディレクトリーを作成します。
  2. 新たに作成したこのディレクトリー内に、nav というサブディレクトリーを作成します。これで、/opt/IBMHttpServer/htdocs/en_US/dogear/nav というディレクトリー構造が得られます。
  3. アプリケーション・サーバーの /opt/WAS/profiles/<profileName>/installedApps/<cellName>/Dogear.ear/sn-nav.war から images ディレクトリーおよび templates ディレクトリーを、手順 2 で作成した /dogear/nav フォルダーにコピーします。また、sn-nav.war ディレクトリー内のすべての HTML ファイルおよび GIF ファイルをコピーします。
  4. 通常は /<IHS_INSTALL_ROOT>/Plugins/config/webserver1 にある plugin-cfg.xml を開きます。
  5. 次の行を見つけます。

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/dogear/nav/*"/>
    この行をリスト 8 に示すコードに置き換えます。
リスト 8. ドッグイアの Nav Bar を最適化する Plugin-cfg.xml エントリー
 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
 Name="/dogear/nav/header.js"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/dogear/nav/custom.css"/>
  1. アプリケーション・サーバーの /opt/WAS/profiles/<profileName>/installedApps/<cellName>/Dogear.ear/dogear.webui.war から手順 2 で作成した /dogear フォルダーに、favicon、h3、misc、rte、script、scriptaculous、および tools の各ディレクトリーをコピーします。また、dogear.webui.war フォルダーから favicon.ico をコピーします。
  2. 通常は /<IHS_INSTALL_ROOT>/Plugins/config/webserver1 にある plugin-cfg.xml を開きます。
  3. 次の行を見つけます。

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/dogear/*"/>
    この行をリスト 9 に示すコードに置き換えます。

リスト 9. ドッグイアのアプリケーションを最適化する Plugin-cfg.xml エントリー

      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/j_security_check"/> 
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/dogear/auth/j_security_check"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/*.jsp"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/logout/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/post/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/delete/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/html/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/tabtags/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/tabpeople/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/tabsubs/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/toolbox/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/about/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/help/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/linkroll/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/click/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/atom/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/atomclick/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/json/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/xbel/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/snippet/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/jsclick/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/lisnippet/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/api/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/export/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/count/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/tagsets/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/tags/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/tagslike/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/peoplelike/*"/> 
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
      Name="/dogear/favicon/*"/>

プロフィール用の静的コンテンツ

プロフィール機能用の静的コンテンツをアプリケーション・サーバーから Web サーバーに移動するには、次の手順にしたがいます。

  1. Web サーバーのドキュメント・ルートに、profiles というディレクトリーを作成します。
  2. 新たに作成したこのディレクトリー内に、nav というサブディレクトリーを作成します。これで、/opt/IBMHttpServer/htdocs/en_US/profiles/nav というディレクトリー構造が得られます。
  3. アプリケーション・サーバーの /opt/WAS/profiles/<profileName>/installedApps/<cellName>/peoplepages.ear/sn-nav.war から images ディレクトリーおよび templates ディレクトリーを、手順 2 で作成した /profiles/nav フォルダーにコピーします。また、sn-nav.war ディレクトリー内のすべての HTML ファイルおよび GIF ファイルをコピーします。
  4. 通常は /<IHS_INSTALL_ROOT>/Plugins/config/webserver1 にある plugin-cfg.xml を開きます。
  5. 次の行を見つけます。

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/profiles/nav/*"/>
    この行をリスト 10 に示すコードに置き換えます。

リスト 10. プロフィールの Nav Bar を最適化する Plugin-cfg.xml エントリー

 <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
 Name="/profiles/nav/header.js"/>
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/profiles/nav/custom.css"/>
  1. アプリケーション・サーバーの /opt/WAS/profiles/<profileName>/installedApps/<cellName>/peoplepages.ear/peoplepages.war から手順 2 で作成した /profiles フォルダーに、css、demo_movie、help、images、および javascript の各ディレクトリーをコピーします。
  2. 通常は /<IHS_INSTALL_ROOT>/Plugins/config/webserver1 にある plugin-cfg.xml を開きます。
  3. 次の行を見つけます。

    <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/profiles/*"/>
    この行をリスト 11 に示すコードに置き換えます。
リスト 11. プロフィールのアプリケーションを最適化する Plugin-cfg.xml エントリー
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/profiles"/> 
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/profiles/"/> 
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/profiles/j_security_check"/> 
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/profiles/*.jsp"/> 
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/profiles/*.do"/> 
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" 
Name="/profiles/html/*"/>

WebSphere Application Server のパフォーマンスの最適化

インフラストラクチャーの構成要素で、パフォーマンスの調整が最も難しいものの 1 つとして、アプリケーション・サーバーが挙げられます。環境ごとに異なるデプロイメントが用いられるため、最適なサーバー・パフォーマンスを得るには各デプロイメントに応じた設定が必要です。通常は、実稼働テストの前にロード・テストを行うことが推奨され、特定のユース・ケースに対して製品を試験します。IBM Tivoli Performance Viewer を使用して、さまざまなリソース (たとえば、スレッド・プール、JDBC 接続プール、メモリー使用状況など) をモニターすることもよく行われます。さまざまな実行の後で、アプリケーション・サーバーは正しくチューニングされます。

WebSphere Application Server のバージョン 6 から、Tivoli Performance Viewer がサーバー管理コンソールの一部として組み込まれています。Tivoli Performance Viewer の使い方については、 WebSphere Application Server InfoCenter(US) を参照してください。

このセクションでは、アプリケーション・サーバーを最大限に活用するための基本的な推奨事項を説明します。これらの推奨事項はスタート地点と考えてください。「リソース」セクションには、特に WebSphere Application Servers のチューニングについて書かれたドキュメントへのリンクが含まれています。

メモリーの使用状況

Lotus Connections の 5 つのすべての機能が、複数のアプリケーション・サーバー・インスタンスで構成される 1 つのノード (つまり、1 つの物理サーバー) 上で実行されている場合は、各アプリケーション・サーバーに十分なメモリーを割り当て、サービス間で相互干渉が行われないようにする必要があります。たとえば、4GB の RAM を持つサーバーでは、各サービスごとに最大 512MB の RAM を割り当てます。内部のテストにより、これよりも高い値を設定すると、Java Virtual Machine (JVM) が他のタスクよりもガーベッジ・コレクションの実行に費やす時間が長くなり、パフォーマンスが低下することがわかっています。

これを行うには、WebSphere Application Server の管理コンソールにログオンし (たとえば、http://yourserver.acme.com:9060/ibm/console)、「アプリケーション・サーバー」->「<serverName>」->「Java およびプロセス管理」->「プロセス定義」-「Java 仮想マシン」を選択します。

また、不要なガーベッジ・コレクションを避けるために、「初期ヒープ・サイズ」と「最大ヒープ・サイズ」を同じ値に設定します (図 3 参照)。

図 3. ActivitiesServer の Java 仮想マシンの設定
ActivitiesServer の Java 仮想マシンの設定

これを各アプリケーション・サーバーで行います。

接続プール

プロセッサーの使用率が低いのに、アプリケーションの応答が遅いと感じられる場合は、データベースの照会を実行するために利用できる十分な接続がない可能性があります。デフォルトでは、データベースごとの最大接続数は 10 です。Lotus Connections のデプロイメントがどのように使用されているかに応じて、特定の機能の最大接続数を増加させるとよいでしょう。

たとえば、大量のユーザーが同時に特定の 1 機能を使用すると予測される場合は、対応する JDBC データ・ソースを変更し、最大接続数を増加させる必要があります。同時ユーザー数が 100 から 500 のロードに対しては、最大接続数の開始値は 30 が適しています。同時ユーザー数が 1,000 と予測される場合は、このパラメーターを 50 に設定してください。この値の調整が必要かどうかを判断する最も良い方法は、Tivoli Performance Viewer を使用することです。

また、最小接続数を 15 に設定します。これにより、サーバーは起動直後に、大量の同時ユーザーを処理するために必要な接続を作成します。

この値を変更するには、WebSphere Application Server 管理コンソールにログオンし、「リソース」->「JDBC」->「データ・ソース」->「<dsName>」->「接続プール」プロパティーを選択します。図 4 を参照してください。

図 4. アクティビティーのデータ・ソース用の JDBC 接続プールの設定
アクティビティーのデータ・ソース用の JDBC 接続プールの設定

最後に、データベース・サーバーが、データベースごとに指定された数の接続を処理するよう構成されていることを確認します。このパラメーターの構成方法については、データベース・ベンダーのドキュメントを参照してください。

スレッド・プール

プロセッサーの使用率が低いのに、応答時間が遅い場合は、受信した要求を処理できるだけの十分なスレッドをサーバーが持っていない可能性があります。同時ユーザーが大量にいる場合 (たとえば、2000 人)、最大スレッド数の開始値は 100 が適しています。この値は常に、JDBC 接続プールの最大サイズとして指定された値と少なくとも同じであることが必要です。スレッド・プールのサイズを設定するには、WebSphere Application Server 管理コンソールにログオンし、「アプリケーション・サーバー」->「<serverName>」->「スレッド・プール」->「Web コンテナー」->を選択します。

図 5. ActivitiesServer の WebContainer のスレッド・プール設定
ActivitiesServer の WebContainer のスレッド・プール設定

メモ: Web サーバーはスレッド・プール設定を持ち、2 つのサーバーは相互に補完しあう必要があります。そうでないと、アプリケーション・サーバーがより多くの要求を処理できる状態でも、Web サーバーが十分なスレッドを持たず、トラフィックをアプリケーション・サーバーに転送できない (または、この逆になる) ことがあります。IBM HTTP Server では、この設定は ThreadsPerChild と呼ばれていて、httpd.conf ファイル内で構成します。


LDAP のパフォーマンスの最適化

LDAP サーバーのパフォーマンスに影響を与える要因を知るには、まず、Lotus Connections がどのように LDAP サーバーを使用するのかを理解する必要があります。さまざまな機能が、ユーザー認証およびユーザー情報のために、LDAP ディレクトリーに依存しています。Lotus Connections は、対応するローカルのデータベースにユーザー情報をキャッシュします。この方法により、Lotus Connections は姓、名、電子メールアドレスなどのユーザー情報を取得するために LDAP に直接接続する必要がなくなり、パフォーマンスが向上します。

また、LDAP ディレクトリーの各ベンダーは、パフォーマンス・チューニングのメカニズムをサポートしています。たとえば、データに索引を作成したり、キャッシュおよびバッファーのオプションを構成できる機能などが用意されています。このセクションでは、Lotus Connections によって適切に使用されるように、データの索引を作成する推奨手順を説明します。

プロフィールのインポート用の索引属性

プロフィール機能は、Lotus Connections の他の機能よりも、LDAP サーバーにより強く依存しています。デフォルトでは、ユーザー情報は LDAP サーバーからプロフィール・データベースに定期的にインポートされます。プロフィール機能は、指定された検索フィルターに基づいて LDAP サーバーからユーザー情報を抽出する IBM Tivoli Directory Integrator Assembly Line を使用します。検索フィルターは LDAP 検索エンジンへの入力であり、何を検索するのかを定義します。

たとえば、次のような検索フィルターが使用されます。

(&(ou=Americas)(objectclass=inetOrgPerson)

このサンプルの検索フィルターが指定されると、Tivoli Directory Integrator は LDAP リポジトリーですべてのオブジェクトを検索し、「ou=Americas かつ objectclass=inetOrgPerson」という属性を持つオブジェクトを返します。このため、LDAP リポジトリーは、検索フィルターで指定される属性で索引が作成されていることが重要です。これらの属性の索引が存在しない場合、LDAP 検索は大幅に遅くなります。

LDAP で特定の属性に索引を構成および作成する方法については、ベンダー指定のドキュメントを参照してください。

ログイン用の索引属性

索引を作成するもう 1 つの重要な属性はログイン属性で、通常は uid または mail です。これらの属性の索引を作成することで、ログイン・プロセスの速度が向上します。

LDAP で特定の属性に索引を構成および作成する方法については、ベンダー指定のドキュメントを参照してください。

データベースのパフォーマンスの最適化

各データベースは、データベースが実行されているオペレーティング・システムに依存する非常に特有なチューニング・パラメーターを持っています。Lotus Connections のデータベースをデプロイする際に考慮すべきヒントを以下に示します。

  • 接続プール: 使用するデータベースが、データ・ソースの接続プールで指定された接続数を処理できるようにしてください。デフォルトでは、各データ・ソースは最大 10 接続を使用するよう構成されています。すべての機能のすべてのデータベースが 1 つのデータベース・サーバーにある場合は、少なくとも 50 接続を処理できるようにしてください。
  • ハード・ディスクの使用率: さらに、すべての機能に同じデータベース・サーバーを使用する場合は、各データベースを個別の物理ハード・ディスクにデプロイすることを考慮するとよいでしょう。

「リソース」セクションには、特に DB2 データベースおよび Oracle データベースのチューニングについて書かれたドキュメントへのリンクが記載されています。


まとめ

この記事では、Lotus Connections インフラストラクチャーの一部として必要なさまざまなコンポーネントのパフォーマンスを最適化する方法について説明しました。Web サーバーについては、プラグインとログの最適化、およびアプリケーション・サーバーから Web サーバーへの静的データの移動について焦点を当てました。また、アプリケーション・サーバーでのメモリー、スレッド・プール、および JDBC 接続プールの初期構成方法についても説明しました。LDAP サーバーについては、ログオンおよび検索用の属性に索引が存在することが非常に重要です。最後に、データベース・サーバーをチューニングする際のヒントをいくつか紹介しました。

参考文献

学習する

議論する

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Lotus
ArticleID=339254
ArticleTitle=IBM Lotus Connections のデプロイ: インストール後のチューニング
publish-date=09112007