|
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のような、プロセス生成によるオーバーヘッドが解消されますので、パフォーマンスが向上します。
対応サーバー
Apache 1.3以降で動作します。また、下表の組み合わせで動作確認しています。
| プラットフォーム | Apacheのバージョン |
| AIX 4.3.3 | 1.3.22 |
| Solaris 2.6 | 1.3.22 |
| Solaris 7.0 | 1.3.22 |
| Solaris 8.0 | 1.3.22 |
※サポートプラットフォームはNOMADと同じです。
インストール
DSM用ライブラリは、各プラットフォームの共有オブジェクト(.so)として提供されます。
DSM用ライブラリのファイル名はmod_dsm.soとmod_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を利用してください。