![]() ![]() ![]() ![]() ![]() |
管理ガイド 05/21/03 10:02:24 |
この章では、Novell exteNd Application Serverをトラブルシューティングする場合に使用できる方法と手順の一部について説明します。この章は、次の節で構成されています。
サーバの実行中は、エラーログ出力機能を常にオンにすることが推奨されます。エラーログ出力は、SilverMasterのAgErrorLogテーブルまたは指定したファイルのいずれかにエラーメッセージに関する詳細な情報を出力する、ウェイトの軽いプロセスです。ログ出力機能は、SMCを使用して有効にできます。詳細については、 サーバのログ出力機能の使用を参照してください。
SilverMasterにログ出力する場合、ツールバーから[Monitor]アイコンを選択し、続けて[Logs]を選択すると、SMCでログを表示することができます。
詳細については、
ログの表示を参照してください。
SMCのデバッグオプションを使用すると、サーバデバッグメッセージをサーバコーンソールに出力できるようになります。オプションには、クライアントリクエスト、Webアプリケーション、およびSQLステートメントのデバッグが含まれます。デバッグオプションは、アプリケーションのデバッグ目的でのみ有効にします。これは、デバッグアクティビティによって、サーバのパフォーマンスが大幅に妨げられるためです。
注記: Windowsのサービスとしてサーバを実行している場合、出力は、コンソールウィンドウではなくエラーログに出力されます。
入力する数は、表示する詳細のレベルを示します。0という値は、メッセージが出力されないことを意味します。デバッグオプションは、次のとおりです。
データベース接続に関する問題が解決しない場合は、JDBCトレースを使用します。
サーバをシャットダウンします( アプリケーションサーバのシャットダウンを参照)。
http-server.Jdbc.DriverManager.LogFileエントリをpropsファイルに追加し、ログファイルを指すようにします。たとえば、ログファイルがd:\test\jdbc.logの場合、httpd.propsファイルに次の行を作成します。
http-server.Jdbc.DriverManager.LogFile
=d:\\test\\jdbc.log
注記: JDBCトレースはトラブルシューティングに対してのみ使用してください。これは、サーバの処理速度が低下し、非常に多くのディスク容量が使用されるためです。
サーバのコンソールウィンドウ(サーバが起動された元のウィンドウ)にコマンドを入力すると、サーバの状態に関する診断情報を取得することができます。たとえば、メモリ使用状況、スレッド、セッション、およびサーバシステムプロパティに関する情報を取得したり、異なるサブシステムに対してトレース機能を有効にしたりすることが可能です。
Watcherツールを使用すると、サーバが応答しなくなった場合にサーバの状態を把握できるようになります。有効にすると、Watcherでは、1分ごとにサーバの状態をログ出力します。
デバッグの困難な問題が発生した場合には、Watcher変数を見つけることが推奨されます。
次のプロパティをhttpd.propsファイルに追加します。
http-server.com.sssw.srv.httpdwatcher
プロパティの値をウォッチャ設定ファイルのパス名に設定します。例は次のとおりです。
http-server.com.sssw.srv.httpdwatcher=c:\\temp\\watchconfig.txt
サーバの起動時にこのプロパティが設定されている場合、サーバでは、「ウォッチャスレッド」を作成します。ウォッチャスレッドは通常はスリープ状態にあり、1分ごとに、httpdwatcherプロパティの値として指定されたウォッチャ設定ファイルの存在をチェックするためにウェイクアップします。
ウォッチャ設定ファイルが存在しない場合 ファイルが存在しない場合、Watcherでは何も実行されず、単にスリープ状態に戻ります。このような状況では、Watcherによるサーバのパフォーマンスへの影響は最小です。また、サーバがハングした場合でも、Watcherがハングすることはめったにありません。
ウォッチャ設定ファイルが存在する場合 Watcherでは、ウォッチャ設定ファイルが存在していることを検出すると、この設定ファイルを読み込み、さらなる操作を制御するために使用します。
ウォッチャ設定ファイルについて ウォッチャ設定ファイルは、次が含まれていなければならないASCIIテキストファイルです。
7 c:\temp\watchout.txt
このファイルでは、スレッド、セッション、およびデータベース接続に関する情報を、指定した出力ファイルに1分ごとにダンプするようWatcherに通知します。
この節では、アプリケーションサーバの起動に失敗する理由の一部と、この問題の解決方法について説明します。サーバに関する問題のトラブルシューティングの詳細については、 SilverMasterInitを使用したSilverMasterの再作成または更新を参照してください。
注記: サーバエラーは、使用している特定のデータベースに関連していることがあります。データベース固有の情報については、『インストールガイド』を参照してください。
不適切なシステムリソースのために発生するサーバエラーの原因には、次の2つがあります。
データベースが適切に同期化されていないことがエラーメッセージによって示される場合、サーバの起動に失敗することがあります。このエラーは、配備データベースのスキーマを変更した場合に発生する可能性があります。この問題を解決するために使用できるサーバ起動オプションには、次の2つがあります。これらのオプションを使用する前に、他のユーザがデータベースに同時にアクセスしていないことを確認します。
DOSプロンプトから、 -nodbcheckオプション(サーバの\binディレクトリにあります)を使用して、サーバを強制起動します。
SilverServer.exe -nodbcheck
これは、データベースの整合性をサーバでチェックしないようにします。
DOSプロンプトから、 -noexitondbcheckオプション(サーバの\binディレクトリにあります)を使用して、サーバを起動します。
SilverServer.exe -noexitondbcheck
これは、サーバを起動して、データベースの整合性チェックに失敗した場合でもサーバでエラーをサーバコンソールに出力できるようにします。
データベースの整合性に関連したエラーが表示された場合は、SMCに移動して[Synchronize Database Schema]オプションを実行し、サーバを再起動します。
詳細については、
データベーススキーマの同期化を参照してください。
SilverMonitorは、サーバのステータスを監視し、サーバが異常終了した場合にサーバの再起動を試みる、サーバで実行されているバックグラウンドプロセスです。デフォルトでは、このプロセスは、サーバが起動されるとアクティブになります。SilverMonitorは、変更可能なデフォルトのパラメータを使用して開始します。また、SilverMonitorなしでサーバを実行することもできます。
DOSコマンドラインで、パラメータをサーバ起動オプションとして指定する。 起動オプションの使用を参照してください。
SilverMonitorパラメータの要約は、次のとおりです。
NTレジストリでSilverMonitorパラメータを変更する
レジストリエディタが表示されます。
HKEY_LOCAL_MACHINE>SOFTWARE>Novell>exteNd>AppServer>version number
次のダイアログボックスが表示されたら、前に説明したオプションの1つまたは複数を入力します。複数のオプションを指定する場合は、各オプションをスペースで区切ります。
SilverMonitorを起動するためのオプションは、次の図のとおりです。
SilverMonitorでは、サーバを再起動するとNT EventLogに書き込みを行います。また、SilverMonitorが実行されるディレクトリ(通常は、サーバの\binディレクトリ)にあるSilverMonitor.logファイルにも書き込みを行います。このログファイルでは、監視が開始されるたびにエントリを取得します。
SilverMonitorを再開すると、ログファイルは空になり、最初から開始します。
アプリケーションサーバは、全体的なシステム管理を行うためにSilverMasterデータベースに依存しています。SilverMasterInitは、SilverMasterデータベースで複数のタイプのプロセスを実行するコマンドラインプログラムです。SilverMasterInit実行可能ファイルは、サーバの\binディレクトリにあります。SilverMasterInitを使用すると、次の操作を実行できます。
SilverMasterInitコマンドラインオプションのそれぞれを実行する方法と場合については、次の表のとおりです。オプションのリストを表示するには、コマンドプロンプトで次を入力します。
SilverMasterInit -?
管理アカウント 管理アカウントには、「データベース」と「サーバ」の2つがあります。両方のアカウントは、インストール中に定義されます。サーバ管理アカウントでは、アプリケーションサーバにログインして管理できる人が制限されます。サーバ管理アカウントは、SilverMasterInitを使用して定義します。デフォルトのインストール後、サーバ管理者ユーザアカウントの保持者は、定義済みのAdministratorsグループのメンバーになり、Locksmith権限が与えられます。
アプリケーションサーバでは、SilverMasterデータベースに接続するときにデータベース管理者アカウントを使用します。SilverMasterデータベースアカウントを指定する必要があるのは、SilverMasterInitを実行する場合のみです。
オプションの入力 すべてのコマンドラインオプションに対しては、データベースユーザアカウント名とパスワードを入力する必要があります。また、次の表で記されているものを除くすべてのSilverMasterInitオプションに対して、FullまたはRefreshモードを指定する必要もあります。Fullモードのデータベース初期化を指定した場合は、3つのオプション(-A、-n、および-W)に対して、サーバ管理アカウント名とパスワードをコマンドラインで定義する必要もあります。
パラメータは、コマンドラインでSilverMasterInit起動オプションとして指定します。
SilverMasterInit起動オプション |
説明 |
用途 |
---|---|---|
-? |
SilverMasterInitの使用状況を表示します。 |
オプションの使用状況をチェックする場合に使用します。 |
+cp:a path |
指定したpathをクラスパスに付けます。 |
このオプションは、指定したパスをクラスパスに付けることによって、追加のJavaクラスをアプリケーションに対して使用可能にします。 注記: Javaクラスを拡張するには、AGCLASSPATH環境変数を使用します。 例: SilverMasterInit |
+cp:p path |
指定したpathをクラスパスに付けます。 |
このデバッグオプションは、Novell exteNdテクニカルサポートに連絡せずに使用しないでください。代わりに、AGCLASSPATHを使用して、追加のJavaクラスをアプリケーションに対して使用可能にします。 AGCLASSPATH変数の設定を参照してください。 |
-A adminname |
アプリケーションサーバにログインして管理するために使用されるサーバ管理者ユーザ名を指定します。 |
このオプションを使用すると、新しいSilverMasterデータベースカタログを作成するときにサーバ管理アカウント名(およびパスワード)を定義できます。 指定したサーバユーザアカウントの保持者は、Administratorsグループのメンバーになり、完全なLocksmith権限が与えられます。サーバを管理するには、このアカウントを使用します。 管理者アカウントについてを参照してください。 Fullモードのデータベース初期化を実行する場合は、サーバ管理アカウント名とパスワードを指定する必要があります。 例: SilverMasterInit -f -U |
-a |
アプリケーションサーバでユーザが自分自身を認証しなければならないようにします。 |
このパラメータは、SilverMasterデータベースへの読み込みアクセス(ログインリソースを含む)を誤って制限してしまった場合に設定します。また、このオプションを使用すると、SMCを実行せずに認証をすばやく設定できます。 サーバ認証を使用したログインリソースへのアクセスを参照してください。 -aオプションを実行している場合は、RefreshモードまたはFullモードを指定する必要はありません。 例: SilverMasterInit -a -U |
-b |
起動環境設定を表示します。 |
FullモードまたはRefreshモードによって使用される初期SilverMaster環境プロパティを表示する場合に実行します。 例: SilverMasterInit [-f |
-c |
blobがデータベースに正しく挿入されていることをチェックします。 |
これらのオブジェクトが正しく保存されていることを確認する場合に実行します。 例: SilverMasterInit [-f |
-C properties file |
指定したproperties fileからnameServicePortポートまたはIIOP SSLポートのプロパティを読み込みます。 |
properties fileの構文は、プロパティの前にhttp-serverを指定しないという点以外は、httpd.propsファイルの構文と同じです。代わりに、次のように指定します。 <hostname>.<portnumber> hostnameとportnumberは、ドット(コロンではありません)で区切られます。 portnumberは管理ポートで、値が80以外の場合にのみ必要です。 nameServicePortを設定するには、次のプロパティを設定します。 <hostname>.<portnumber>.com.sssw.srv.nameServicePort=<nameServicePort> 例: tundra.8080.com.sssw.srv.nameServicePort=55597 IIOP SSLポート範囲を設定するには、次のプロパティを使用します。 <hostname>.<portnumber>.com.sssw.srv.port_iiop_ssl_min <hostname>.<portnumber>.com.sssw.srv.port_iiop_ssl_max port_iiop_ssl_minプロパティは、IIOP SSLに対する下限を指定します。範囲を指定しなかった場合、ORBでは、最初に使用可能なポートを取得します。範囲を指定する必要がない場合は、「-1」を使用します。port_iiop_ssl_maxプロパティは、IIOP SSL通信に対する上限を指定します。上限がない場合は、「-1」を使用します。 既存のSilverMasterを更新するには、SilverMasterInitを-rオプションとともに実行します。 例: SilverMasterInit -C port.props -U smbb -P password -A administrator -W admin -r |
-D database |
指定したSilverMasterデータベースからすべてのAgテーブルを削除します。 |
指定したSilverMasterデータベースから既存のアプリケーションサーバシステムテーブル(ユーザ、グループ、およびライセンスデータを含む)をすべて削除します。サーバから配備データベースを削除する場合に使用します。 Fullモードとは異なり、このオプションを使用すると、アプリケーションサーバシステムデータが削除されますが、初期プロパティでは置換されません。 例:
|
-e error log file |
必要に応じて作成される指定のファイルにエラーを書き込みます。 |
エラーが見つからなかった場合、ログファイルは作成されません。 パスを指定しないと、エラーログファイルは、SilverMasterInitを実行した元のディレクトリに保存されます。デフォルトのファイル名はsminit.logです。 例:
|
-f |
新しいSilverMasterデータベースを作成するためにFullモードで実行します。 |
新しいSilverMasterシステムデータとリソースを作成します。このオプションを使用すると、既存のユーザ、グループ、およびライセンスデータが削除されます。 注記: デフォルトにより、サーバは、Fullモードで実行すると制限されます。(開発環境に対して)制限されないようにサーバをインストールするには、SilverMasterInitを、Fullモードで-nとともに実行します。 Fullモードのデータベース初期化を実行する場合は、サーバ管理アカウント名とパスワードを指定する必要があります。 例: SilverMasterInit -f -U |
-L jdbc log file |
指定したログファイルにJDBCデバッグ情報を書き込みます。 |
ログファイル名を指定しなかった場合、このオプションは無視されます。 パスを指定しないと、JDBCログファイルは、サーバの\binディレクトリに保存されます。 例: SilverMasterInit [-f |
-l locksmith account |
Locksmith権限を持たせるユーザまたはグループ(のアカウント)を指定します。 |
このオプションは、Locksmith権限が与えられているアカウントの保持者を誤ってすべて削除してしまった場合に使用します。 SilverMasterへのアクセスの再取得を参照してください。 -lオプションを実行している場合は、RefreshモードまたはFullモードを指定する必要はありません。 例:
|
-n |
アプリケーションサーバへのアクセスを無制限にします。 |
システムデータへのアクセスをロックしたり、ユーザ認証を要求したくない場合に使用します。 このオプションは、許可を設定することによってアクセスをロックするまで、ユーザが管理操作を実行したり、ディレクトリリストを表示したりすることができることを意味します。 サーバとオブジェクトに対するデフォルトのセキュリティを参照してください。 -nオプションを実行している場合は、Fullモードに指定して、サーバ管理ユーザ名とパスワードも指定する必要があります。 例: SilverMasterInit -n -f -U |
-O table space |
SilverMasterに対して指定したOracleテーブルスペースにすべてのAgテーブルを作成します。 |
このオプションは、Oracleを使用してSilverMasterデータベースを作成する場合に使用します。Oracleデータベースによってデータが保存される方法のために、SilverMasterテーブルオブジェクトに対しては、(デフォルトよりも)さらにスペースを割り当てる必要があります。 例: SilverMasterInit [-f |
-P dbpassword |
SilverMasterにアクセスするためにアプリケーションサーバによって使用されるデータベースパスワードを指定します。 |
データベース管理パスワードと関連ユーザアカウントは、サーバのインストール中に、暗号化されてレジストリに保存されます。サーバでは、指定したアカウント名とパスワードを起動時に使用して、SilverMasterデータベースにアクセスします。 例: SilverMasterInit [-f |
-p properties file |
指定したファイルから起動プロパティを読み込みます。 デフォルトは、サーバの\Resourcesディレクトリにあるhttpd.propsです。 |
デフォルト以外のSilverMaster起動プロパティファイルの名前と場所を指定する場合に使用します。 プロパティファイルオプションをSilverMasterInitで設定したら、新しいプロパティファイルを使用するために、コマンドラインからアプリケーションサーバを-pオプションとともに起動する必要があります。 例: SilverMasterInit [-f |
-r |
SilverMasterリソースを更新するためにRefreshモードで実行します。 |
このプロセスでは、Fullモードによって使用されるデータベースのインストール手順の一部をスキップします。このオプションは、既存のユーザ、グループ、およびライセンスデータを削除したくない状況においてSilverMasterシステムデータとリソースを更新する場合に使用します。 例:
|
-W adminpassword |
アプリケーションサーバにログインして管理するために使用されるサーバ管理者アカウントパスワードを指定します。 |
サーバを管理するには、サーバ管理者ユーザとアカウントパスワードを使用します。 Fullモードのデータベース初期化を実行する場合は、サーバ管理アカウント名とパスワードを指定する必要があります。 例: SilverMasterInit -f -U |
-U dbusername |
アプリケーションサーバのSilverMasterデータベースユーザアカウントを指定します。 |
データベース管理ユーザアカウントと関連パスワードは、暗号化されてレジストリに保存されます。サーバでは、指定したアカウント名とパスワードを起動時に使用して、SilverMasterデータベースにアクセスします。 例:
|
-v |
SilverMasterInitが実行されているときに冗長出力を生成します。 |
プロセスに失敗した場合に、このオプションを実行して、エラーが発生した場所を識別します。 例:
|
-x |
SilverMaster初期化プロパティを表示した後、SilverMasterInitを開始せずに終了します。 |
ローカルサーバ起動プロパティを表示する場合に実行します。このオプションを使用しても、プロパティは変更または更新されません。このデバッグオプションは、誤って指定されている初期化設定をチェックするために使用します。 例: |
インストール中に作成されるSilverMasterデータベースは、SilverMasterInitを使用して再作成したり更新したりすることも可能です。SilverMasterデータベースでは、アプリケーションサーバによって使用されるすべての配備データベースを追跡し、また、アプリケーションサーバのシステムテーブル(グループ、ユーザ、およびライセンス情報のテーブルを含む)も保持します。各サーバまたはクラスタには、SilverMasterカタログが1つ存在します。
SilverMasterデータベースの詳細については、
配備データベースの設定を参照してください。
SilverMasterデータベースが壊れた場合は、SilverMasterInitを実行できます。アプリケーションサーバを起動できず、他に何をしても解決できない場合は、次のいずれかの方法を試してください。
注意: 接続に関する問題は、壊れたドライバ接続、壊れた配備データベース、またはネットワーク問題が原因の可能性があります。サーバに関する問題の原因について質問がある場合は、SilverMasterInitを実行する前にNovell exteNdテクニカルサポートまでご連絡ください。SilverMasterInitをFullモードで実行すると、既存のシステムテーブルのコンテンツがすべて削除され、初期化されたデータで置換されてしまいます。既存のシステムテーブル(配備済みのJ2EEアーカイブ、グループ、ユーザ、およびライセンスデータのテーブルを含む)を保持する場合は、Fullモードで実行しないでください。
SilverMasterInitは、Refreshモードで実行して、SilverMasterプロパティをアップグレードしたり、SilverMasterプロパティにアクセスしたりできます。更新プロセスでは、Fullモードによって使用されるデータベースのインストール手順の一部をスキップします。既存のユーザ、グループ、ライセンスデータ、および配備済みのJ2EEアーカイブを削除せずにSilverMasterシステムデータとリソースを更新するには、SilverMasterInitをRefreshモードで実行してください。
注記: アプリケーションサーバのインストールプロセスの一環として、SilverMasterInitではリソースを更新します。アプリケーションサーバは、インストールプログラムを実行することによって、通常は更新します。
SilverMasterInitをRefreshモードで実行する
SilverMasterInit -r options
「Creating Resources will take a few minutes; please wait」というメッセージが表示されます。
SilverMasterInitでは、SilverMasterが依存しているファイルやテーブルを誰かが削除または名前変更したことによって発生した問題を修正できる場合があります。アプリケーションサーバを起動できない場合、またはSilverMasterデータベースに接続できない場合は、SilverMasterInitの実行が必要な可能性があります。
SilverMasterInitでは、壊れたSilverMasterプロパティをリセットできますが、このプログラムでは、データベースに関連付けられている壊れたレジストリキー、設定ファイル、サンプルデータベース、またはファイルを修復することはできません。このようなタイプの問題を解決するには、インストールプログラムを実行してください。
データベーステーブルがすべて削除されないようにするためには、(Fullモードで実行する前に) SilverMasterInitをRefreshモードで実行してみて、サーバの問題が解決されるかどうかを確認してください。
SilverMasterInitをFullモードで実行して新しいSilverMasterプロパティを再生成した場合は、ライセンスインストールの再実行、Silver Securityのユーザとグループの再作成、配備データベースの再追加、およびSilverMasterに配備されていたJ2EEアーカイブの再配備を行う必要があります。
SilverMasterInit -f options
「Creating Resources will take a few minutes; please wait」というメッセージが表示されます。
エラーなしでSilverMasterInitが完了したら、インストールプログラムを使用してライセンスインストールを再実行します。
注記: SilverMasterInitをFullモードで実行すると、保存されていたライセンス情報は削除されます。
ライセンスの追加の詳細については、
ライセンスの管理を参照してください。
注記: データへのアクセスをロックしたり、ユーザ認証を要求したくない場合は、-nオプションをFullモードで実行できます。
SilverMasterInitを使用すると、ロックされたリソースへのアクセスを再取得できます。SilverMasterデータベースは、アプリケーションサーバによってシステムリソースと他のデータベースへのリンクがすべて保存される場所です。デフォルトにより、Locksmith権限を持つユーザには、SilverMasterへの読み込みアクセス許可が与えられます。SilverMasterデータベースへのアクセスを全ユーザに対して誤って拒否してしまった場合、SMCからアプリケーションサーバに誰もアクセスできなくなります。
SilverMasterへの読み込みアクセスが制限されている疑いがある場合は、次の節を参照してください。
デフォルトでは、Locksmith権限を持つ管理者と他のユーザは、データベース内にあるリソースのデータアクセス許可を取得して設定したり、すべてのSilverMasterリソースを読み込んだり、Locksmith権限を他のユーザやグループに与えたりすることができます。Locksmith権限を与えることのできるユーザは、Locksmith権限をすでに持っている人だけです。Locksmith権限が与えられているアカウントをすべて削除してしまった場合は、SilverMasterInit Locksmithオプションを使用してこの権限をユーザに与え、リソースへのアクセスを再取得できるようにしてください。
注記: デフォルトでは、新しいインストールの後、またはSilverMasterInitをFullモードで実行した後、Locksmith権限が与えられた管理者アカウントが自動的に作成されます。
Locksmith権限を持つユーザは、SilverMasterにアクセスできると、リソースをロック解除したり、アクセス権限をリセットしたりできるようになります。
詳細については、
Locksmith権限の使用を参照してください。
SMCまたはSilverMasterInitコマンドラインのいずれかから、サーバ認証を設定することができます。サーバ認証は、SilverMasterデータベースに対する読み込みアクセスを誤って制限してしまった場合に設定する必要があります。ユーザがSilverMasterにアクセスできない場合は、SilverMasterInitサーバ認証オプションを実行して、ユーザが最初にサーバに接続するときに自分自身を認証できるようにしてください。ユーザがSMCからアプリケーションサーバにログインすると、ログインリソースに対するリクエストが発行されます。SilverMasterへのアクセスが制限されている場合、ユーザは、データベースへの読み込みアクセスがないのでログインダイアログにアクセスできません。これは、SilverMasterに「ログイン」リソースが含まれているためです。
サーバ認証オプションを実行する場合は、FullモードまたはRefreshモードを指定する必要はありません。サーバ認証の設定後にサーバを再起動すると、サーバにアクセスする最初の試行によりアカウント情報ダイアログボックスが表示され、ログインすることができます。
あいまいな状況では、スタックの制限を超えてしまう可能性があり、このような場合は、JVM (Java仮想マシン)によってjava.lang.StackOverflowErrorがスローされます。
Java環境におけるWindowsシステムでは、少なくとも2つのプログラムスタックがあり(JVM実装によっては、さらに存在する場合もあります)、そのうちの1つはオーバフローしてStackOverflowErrorをスローさせることができます。
JVM自体のネイティブコード、およびJIT (Just In Time)コンパイラでJavaバイトコードからコンパイルされるネイティブコードによって使用されるハードウェアスタックは、常に存在します。
メソッド呼び出し引数およびJavaメソッドのローカル変数を一時的に保存するために使用されるJavaバイトコードスタックは、常に存在します。これは、JVMによって作成され管理される「ソフト」スタックです。
JVMで作成された各スレッドには、独自のハードウェアスタックとJavaスタックがあります。
デフォルトのスタックサイズが小さすぎると判断した場合は、各スタックのサイズを変更することが可能です。ただし、スタックオーバフローエラーの最も一般的な原因は、メソッドが何度も再帰的に呼び出された場合に発生するプログラミングエラーにあります。このような場合は、スタックのサイズを大きくしても、スタックオーバフローに関する問題は解決されません。スタックサイズを大きくしてみる前に、この種類のエラーがコードに含まれていないことを確認してください。スタックオーバフローが無限な再帰エラーに起因していない場合は、スタックサイズを大きくすることによってスタックオーバフローを修正することが可能です。スタックがオーバフローするかどうかについては、試行錯誤してみて判断してください。
ハードウェアスタックのサイズは、実行可能ファイルのヘッダに保存されている値を使用して、オペレーティングシステムにより判断されます。実行可能ファイル(SilverServer.exe)では、デフォルトのスタックサイズが256Kに指定されています。
スタックサイズを変更するには、MicrosoftのEDITBINユーティリティを使用して、実行可能ファイルのヘッダを変更する必要があります。たとえば、SilverServer.exeのデフォルトのスタックサイズを512Kに変更するには、次のコマンドラインを使用します。
EDITBIN /STACK:0x80000 SilverServer.exe
実行可能ファイルを変更する前には、バックアップを作成しておいてください。
ハードウェアスタックのサイズを大きくしても問題が解決されない場合は、Javaスタックに問題がある可能性があります。JDKのドキュメントには、スタックサイズに影響を与える次の2つのコマンドラインオプションが紹介されています。
デフォルトは、それぞれ128Kと400Kです。これらのオプションは、JDK 1.2 (Java 2)ではドキュメント化されなくなりましたが、非標準(-X)スイッチとして持ち越されています。アプリケーションサーバ実行可能ファイルに対してこれらのオプションを設定するには、-Xではなく+Xを使用してください(アプリケーションサーバ実行可能ファイルでは、+オプションを、JVMに渡すオプションとして解釈します)。
アプリケーションサーバ起動オプションの詳細については、
起動オプションの使用を参照してください。
たとえば、アプリケーションサーバに対するネイティブスタックとJavaスタックを両方とも最大の512Kに設定するには、次のコマンドラインを使用します。
SilverServer +Xss512k +Xoss512k
注記: デフォルトのスタックサイズ値を大きくすると、各スレッドに割り当てられる仮想メモリの量も増えます。仮想メモリは、有限なリソースではありますが、大きなものです(Windows NTのような32ビットのオペレーティングシステムでは、2Gまでの仮想メモリをプロセスで処理できます)。スレッドごとに必要な仮想メモリの量を増やすと、作成できるスレッドの数は少なくなります。(サーバでは、接続されているクライアントごとに1つのスレッドを使用するため)これによりサーバでサポートできる同時接続ユーザ数も少なくなることを理解しておくことは重要です。
この節では、分類されていなかった問題で解決しなければならない可能性のあるものの一部について説明します。
アプリケーションサーバがハングまたはループしているように見える場合は、各スレッドのリスト(スタックトレースも含む)を生成します。リストを生成しても、サーバは停止しません。
NetWareの場合 設定したロガーバッファサイズがスレッドスタック情報を処理するのに十分大きいことを確認してください (再呼び出しおよびレイアウトは、大きな数に設定することが推奨されます)。
java -show
java -showstacksXXXX
ここで、XXXXは、アプリケーションサーバプロセスのJVM IDです。
UNIXの場合 アプリケーションサーバを実行しているプロセスを判断します。
ps -all | grep Silver
kill -3 SilverServer_process_ID
アプリケーションサーバにより、サーバが起動された元のウィンドウに、各スレッドがスタックトレースとともにリストされます。
Windowsの場合 サーバを起動したウィンドウで、<Ctrl>+<Break>を押します。アプリケーションサーバにより、各スレッドがスタックトレースとともにリストされます。
NTアプリケーションログ内では、ソケット例外メッセージを受け取る場合があります。通常は、クライアントが一方的にソケットを閉じたことを示しているため、これが問題になることはありません。Internet Explorerのようなブラウザでは、接続がしばらくアイドル状態になるとこのような状況が発生し、デバッグ機能を使用して実行中に、サーバのコンソールでソケット例外として表示されます。
このような警告は、通常の状態を単に反映しているため、一般的に無視してかまいません。
![]() ![]() ![]() ![]() ![]() |
管理ガイド 05/21/03 10:02:24 |
Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC, a wholly owned subsidiary of Novell, Inc. All rights reserved.