目次に戻る DSO対応

DSM for UNIX Ver6.0以降でDSOをサポートしています。
DSOの機能を利用することにより、Webアプリケーション実行時のパフォーマンスが向上します。ここでは、その使用方法について説明します。

DSO
Apache 1.3からDSO(Dynamic Shared Object)がサポートされました。
これにより、Apacheモジュールの動的読み込みが可能になりました(これまででは、Apacheモジュールを追加するには、Apacheの再ビルドが必要でした)。

DSOは、必要なときのみ、モジュールがロードされるため、メモリの有効利用が可能です。また、ロードされている間は、リクエストがあっても、そのロードされたモジュールを使用するため、CGIのような、プロセス生成によるオーバヘッドが解消されます。

DSM Ver6.0から、DSMCGIは、このDSO形式のApacheモジュールに対応しました。
これにより、CGIのような、プロセス生成によるオーバーヘッドが解消されますので、パフォーマンスが向上します。

DSOイメージ

対応サーバー


Apache 1.3以降で動作します。また、下表の組み合わせで動作確認しています。

プラットフォームApacheのバージョン
AIX 4.3.31.3.22
Solaris 2.61.3.22
Solaris 7.01.3.22
Solaris 8.01.3.22

※サポートプラットフォームはNOMADと同じです。


インストール


DSM用ライブラリは、各プラットフォームの共有オブジェクト(.so)として提供されます。
DSM用ライブラリのファイル名はmod_dsm.somod_dsms.soです。
mod_dsm.soが通常のリクエストを処理するモジュールで、mod_dsms.soはSOAPリクエストを処理するためのモジュールです。
両ファイルとも、NOMADのインストールディレクトリ下の"software"ディレクトリにあります。

このライブラリは、Apache DSO(Dynamic Shared Object)として提供されます。ApacheのDSOサポートは、mod_so.cというモジュールを基にしていますので、mod_so.c が有効になっている必要があります。下記のコマンドで有効になっているかを確認してください。
下記コマンドを実行することにより、有効になっているモジュールがすべて表示されます。mod_so.cが表示されたら、有効になっています。

> APACHE_HOME/bin/httpd -l

注)APACHE_HOMEはApacheがインストールされているディレクトリを示します。

mod_so.cが無効の場合は、動作しませんので、設定を有効に変更してから、使用してください。なお、設定変更方法は、Apacheのドキュメントを参照してください。

DSM用ライブラリは、Apacheで提供されるapxs(APache eXtenSion)というサポート プログラムによってインストールします。実際のインストールは下記の手順を実行します。

> perl APACHE_HOME/bin/apxs -i -a -n dsm mod_dsm.so

> perl APACHE_HOME/bin/apxs -i -a -n dsmsoap mod_dsms.so

上記コマンドにより、mod_dsm.soとmod_dsms.soがAPACHE_HOME/libexecへコピーされ、Apacheの設定ファイル(デフォルトはhttpd.conf)へ、dsm_moduleとdsmsoap_moduleに関する指示が2行ずつ追加され、これらのモジュールが有効になります。設定ファイル(httpd.conf)に以下の行が追加されたことを確認してください。


LoadModule dsm_module libexec/mod_dsm.so
AddModule mod_dsm.c (追加されない場合もあります)

LoadModule dsmsoap_module libexec/mod_dsms.so
AddModule mod_dsms.c (追加されない場合もあります)



> APACHE_HOME/bin/apachectl configtest

上記コマンドで、Apacheの設定ファイル(httpd.conf)の構文を検証します。
これで、インストールは完了です。これにより、ApacheサーバーへのDSM用ライブラリのファイル名とその登録が設定されます。しかし、まだ、DSM用ライブラリは使用できません。次節の設定方法に従って、設定を変更し、Apacheを再起動することで、使用可能になります。


設定方法


DSM用ライブラリのインストールの後は、クライアントからのHTTPリクエストがどのようなときに、DSM用ライブラリへ処理を渡すかを設定します。

これは、Apacheの設定ファイル(httpd.conf)内で行います。
以下のディレクティブが使用できます。

<Directory>
このディレクティブを使用することにより、あるディレクトリへのHTTPリクエストをすべてDSM用ライブラリに処理させることができます。
<Location>
このディレクティブを使用することにより、あるURLへのHTTPリクエストをすべてDSM用ライブラリに処理させることができます。
<Files>
このディレクティブを使用することにより、あるファイルへのHTTPリクエストをすべてDSM用ライブラリに処理させることができます。
ディレクティブに関する詳細はApacheのドキュメントを参照してください。
この設定変更後、Apacheサーバーを再起動することにより、DSM用ライブラリを使用することができます。

<Directory><Location><Files>の中には、"SetHandler"ディレクティブを記述します。

SetHandler dsm-handler
または
SetHandler dsmsoap-handler

※Apache設定ファイルへ設定可能なDSM独自のパラメータはありません。

設定内容のサンプル


ここでは、設定のサンプルを示します。これらのサンプルをテンプレートとして使用し、サーバー設定を行ってください。

  • /some/whereディレクトリへのリクエストをすべてdsm_moduleに処理させる

    <Directory /some/where>
    SetHandler dsm-handler
    </Directory>


  • URLが/urlへのリクエストをすべてdsm_moduleに処理させる

    <Location /url>
    SetHandler dsm-handler
    </Location>


  • dsm拡張子ファイルへのリクエストをすべてdsm_moduleに処理させる

    <Files *.dsm>
    SetHandler dsm-handler
    </Files>


  • <VirtualHost>を使用した例

    <VirtualHost 162.168.0.1>
    ServerName myserver.mydomain.com
    <Location /url>
    SetHandler dsm-handler
    </Location>
    </VirtualHost>


    SOAPリクエストを処理する場合は"SetHandler dsmsoap-handler"を指定します。DSM-SOAPの動作については「SOAP機能外部関数」を参照してください。

  • URLが/url-normalへの通常リクエストをdsm_moduleに処理させ、/url-dsmsoapへのSOAPリクエストをdsmsoap_moduleに処理させる

    <Location /url-normal>
    SetHandler dsm-handler
    </Location>
    <Location /url-dsmsoap>
    SetHandler dsmsoap-handler
    </Location>



    既存のCGIアプリからの移行
    相違点は、<FORM>タグのACTIONパラメータの値だけです。その他は、通常のDSMCGI.EXEと同じです。CGI形式のアプリケーションをDSO形式に移行するときは<FORM>タグ部分のみを変更するだけで可能です。
    なお、<FORM>タグを使用していない場合(<A>タグ使用時など)、指定するURL部分のみを変更するだけで、移行できます。

    例)


    <FORM METHOD="POST" ACTION="/some/where">

    </FORM>
    ※上記の例は場合、URLが/some/whereのとき、DSM用ライブラリに処理させるというサーバー設定が必要です。


    注意事項
    DSOはHTTPリクエストのあったライブラリを実行することにより、サービスを提供します。
    一度、実行(ロード)されたライブラリはApacheサーバーが終了するまでアンロードされません。したがって、バージョンアップのときや"dsmsrv quit"などDSM情報のクリアのときは、Apacheサーバーを終了してから行ってください。Apacheサーバーが終了していない場合は正常にクリアできません(DSM用ライブラリがロード中であるため、共有メモリの情報を掴んでおり、削除できません)。

    また、DSM用ライブラリではApacheのタイムアウト設定が有効になりません。NOMADのタイムアウト判定には、「dsm.ini」のTaskWaitTimeMinを利用してください。