E Oracle HTTP Serverのトラブルシューティング

Oracle HTTP Serverの使用時に発生する可能性のあるいくつかの一般的な問題をトラブルシューティングするヘルプがあります。

ポートの競合によりOracle HTTP Serverの起動に失敗する

Oracle HTTP Serverがポートの競合により起動できない場合、文字列[VirtualHost: main] (98)Address already in useを含むメッセージが生成されます。このエラー状態は、Oracle HTTP Serverに対して構成されたリスニング・ポートが、別のプロセスで使用されているものと同じ場合に発生します。

生成されたメッセージは次のようになる可能性があります。

[VirtualHost: main] (98)Address already in use: make_sock: could not bind to address [::]:7777

解決方法

そのポートをすでに使用しているプロセスを判別し、Oracle HTTP ServerのIPポート・アドレスか、競合しているプロセスのポートを変更します。

ノート:

Oracle HTTP Serverインスタンスが構成ウィザードで作成された場合、自動的なポート管理は行われません。同じリスニング・ポートを使用して複数のインスタンスを作成することが可能です。

多数のhttpdプロセスによるシステムのオーバーロード

システムにあまりにも多くのhttpdプロセスがオーバーロードされると、通常処理のためのリソースが不足します。これにより、レスポンス時間が遅くなります。マシンが対処できる値までMaxRequestWorkersの値を下げることができます。

1つのシステム上で実行中のhttpdプロセスが多すぎると、通常処理のためのリソースが不足し、レスポンス時間が低下します。

解決方法

マシンが対処できる値までMaxRequestWorkersの値を下げます。

「Apache MPM Common Directives」を参照してください。

1024未満のポートでOracle HTTP Serverの起動時に発生する権限拒否

Oracle HTTP Serverを1024未満のポートで起動しようとすると、文字列[VirtualHost: main] (13)Permission denied: make_sock: could not bind to address [::]:443を含むメッセージが生成されます。このエラー状態は、これらのポートをバインドするためにroot権限が必要なために発生します。

生成されたメッセージは次のようになる可能性があります。

[VirtualHost: main] (13)Permission denied: make_sock: could not bind to address [::]:443 no listening sockets available, shutting down

1024未満のポートでは、Oracle HTTP Serverは起動しません。これは、これらのポートをバインドするには、root権限が必要になるためです。

解決方法

「特権ポートでのOracle HTTP Serverインスタンスの起動(LinuxおよびUNIXのみ)」のステップに従って、特権ポートでOracle HTTP Serverを起動します。

ログ・ファイルを使用したエラーの特定

エラーの特定に役立つ、リライト、スクリプト、およびサーバー・ログの3つのタイプのログ・ファイルがあります。

これらのログ・ファイルは、次の項で説明します。

リライト・ログ

このログ・ファイルは、mod_rewriteが使用されている場合のデバッグに必要です。このログ・ファイルでは、リライト・エンジンによるリクエストの変換方法の詳細分析が生成されます。OHSがApacheログ形式を使用するように構成されている場合は、LogLevelディレクティブにより、mod_rewriteモジュールの詳細レベルが制御されます。

mod_rewriteでは、trace1からtrace8のログ・レベルでアクションが詳細に記録されます。ログ・レベルは、LogLevelディレクティブを使用して、mod_rewriteに明確に設定できます。debugレベルまではアクションは記録されませんが、trace8ではすべてのアクションが記録されます。

LogLevel alert rewrite:trace3

ここでLogLevelは、サーバーではalertに設定されていますが、mod_rewriteモジュールではtrace3が有効になっています。

ノート:

これは、apacheログ形式が使用されている場合にのみ適用されます。

詳細は、「Apache Module mod_rewrite」を参照してください。

スクリプト・ログ

このログ・ファイルでは、CGIスクリプトからの入出力を記録できます。このファイルはテストにのみ使用し、本番サーバーには使用しないでください。

関連項目:

次のApache HTTP Serverドキュメントの「ScriptLog」

http://httpd.apache.org/docs/current/mod/mod_cgi.html#scriptlog

サーバー・ログ

このログ・ファイルには、全体的なサーバー問題が記録されます。サーバー・ログの構成および表示に関する詳細は、「Oracle HTTP Serverログの管理」を参照してください。

リモート・ホストでのOracle HTTP Server Instanceインスタンスの回復

リモート・ホストのOracle HTTP Serverインスタンスを回復するには、tarおよびuntarを使用する必要があります。pack.shおよびunpack.shは、このシナリオでは機能しません。

リモート・ホスト(管理サーバーを持たず、管理対象サーバーのみを持つホスト)にインストールされているOracle HTTP Serverインスタンスを回復する必要がある場合、このシナリオでは、pack.shunpack.shが動作しないので、taruntarを使用する必要があります。

詳細は、「別のホストへのWeb層コンポーネントのリカバリ」を参照してください。

Oracle HTTP Serverのパフォーマンスの問題

Oracle HTTP Serverの実行中にパフォーマンスの問題が発生する場合があります。このドキュメントには、このようなパフォーマンス関連の問題を説明するトピックがいくつか含まれています。

ネットワーク・ファイル・システムに置かれる特別なランタイム・ファイル

Oracle HTTP Serverは内部処理にロック(つまりロック・ファイル)を使用します。これらのファイルはロックが作成されると動的に作成され、ロックが取得または解放されるたびにアクセスされます。これらのファイルが低速なファイル・システム(たとえばネットワーク・ファイル・システム)に置かれると、サーバーのパフォーマンスが低下する場合があります。この問題を回避するには:

Linuxの場合:

httpd.confで、Mutex fnctl:filelocMutex sysvsemに変更します。filelocはロック・ファイルの場所のパスです。

httpd.confのデフォルトの設定:

Mutex fcntl:${ORACLE_INSTANCE}/servers/${COMPONENT_NAME}/logs

変更後:

Mutex sysvsem

詳細は、「Apache Core Features」を参照してください。

ネットワーク・ファイル・システムでのUNIXソケット

mod_cgidモジュールは、デフォルトでは有効になっていません。有効な場合、このモジュールはUNIXソケットを内部で使用します。UNIXソケットが低速なファイル・システム(たとえばネットワーク・ファイル・システム)に置かれると、大幅なパフォーマンスの低下が発生することがあります。次のディレクティブを設定して、この問題を回避できます。

  • mod_cgidが有効な場合は、ScriptSockディレクティブを使用してmod_cgidのUNIXソケットをローカル・ファイルシステムに配置します。次に例を示します。
    ScriptSock /var/run/cgid.sock

詳細は、「Apache Module mod_cgid」を参照してください。

低速なファイル・システムに置かれたDocumentRoot

mod_wl_ohsを使用してリクエストをバックエンドのWLSサーバー/クラスタにルーティングし、DocumentRootが低速なファイル・システム(ネットワーク・ファイル・システムなど)に置かれている場合は、mod_wl_ohsによりバックエンドのサーバーにルーティングされるすべてのリクエストでパフォーマンスの問題が発生することがあります。これは、SetHandler weblogic-handlerではなく、WLSRequestONに設定することで解決できます。

共有ファイル・システム上で生成されたインスタンス

NFS(ネットワーク・ファイル・システム)を含む共有ファイル・システム上でOracle HTTP Serverインスタンスを生成する際に、機能上や性能上の問題が生じた場合には、デフォルト構成のファイル・システム・アクセスに起因する可能性があります。この場合、オペレーティング・システムに固有のhttpd.confファイルを更新する必要があります。「共有ファイル・システムでのOracle HTTP Serverコンポーネント構成の更新」を参照してください。

DMSの共有メモリーの不足

Oracle HTTP Server DMSに対して必要な共有メモリーの計算が間違っている場合、エラー・ログが表示されます。これらの問題は、DMS共有メモリーのディレクティブをデフォルト値の4096よりも大きく設定するか、問題が解決されるまでディレクティブを50%高く設定し続けることによって解決できます。

Oracle HTTP Server DMSに対する必要な共有メモリーの計算が誤っているときに、文字列dms_fail_shm_expansion: out of DMS shared memory in pid XXX, disabling DMS; increase DMSProcSharedMem directive from YYYを含むエラー・ログが表示されます。これは、DMSProcSharedMemをデフォルトの値4096よりも大きい値に設定することで解決できます。一部の極端な構成では、Oracle HTTP Serverのエラー・ログに次のメッセージが表示されることがあります。

dms_fail_shm_expansion: out of DMS shared memory in pid XXX, disabling DMS; increase DMSProcSharedMem directive from YYY

これは、Oracle HTTP Server DMSに対して必要な共有メモリーの計算が誤っているためです。これは、DMSProcSharedMemをデフォルトの4096より大きい値に設定することで解決できます。問題が解決するまで継続してDMSProcSharedMemを50%ずつ高く設定します。DMSProcSharedMemの最小値は256バイトで、最大値は65536です。

数百から数千もの多くの仮想ホストを持つ構成で、前述の回避策で解決できない場合は、かわりに環境変数OHS_DMS_BLOCKSIZEをOracle HTTP Serverがエラーなく開始する十分大きな値に設定できます。この変数の値は数キロバイトであり、524288は開始値として適切です。エラーが繰り返される場合は、Oracle HTTP Serverがエラーなく開始するまで値を50%ずつ増加させてください。

MD5アルゴリズムを使用して署名された証明書が原因でOracle HTTP Serverの起動に失敗する

Oracle HTTP Serverが、Message Digest 5 (MD5)アルゴリズムで署名された証明書を含むサーバー・ウォレットが原因で起動できない場合、MD5証明書をSecure Hash Algorithm 2 (SHA-2)証明書に置き換えることができます。

Oracle HTTP Serverウォレットに、Message Digest 5 (MD5)アルゴリズムを使用して署名された証明書または証明書リクエストが含まれている場合は、Oracle HTTP Serverは起動に失敗します。

解決方法: MD5証明書をSecure Hash Algorithm 2 (SHA-2)証明書と置き換えます。

コンポーネントの起動に失敗した場合にノード・マネージャのログにクリア・メッセージが表示されない

Oracle HTTP Server (OHS)コンポーネントの起動に失敗した場合、ORACLE_INSTANCE/servers/COMPONENT_NAME/logs/COMPONENT_NAME.logに次のエラーが記録されます:

[OHS] [INCIDENT_ERROR:20] [AH00480] [mpm_event] [host_id: xxx] [host_addr: xxx] [pid: xxx] 
[tid:xxxx] [user: xxx] [VirtualHost: main] (11)Resource
temporarily unavailable: AH00480: apr_thread_create: unable to create worker thread

これは、仮想メモリーが不足しているか、OHSで実行可能なプロセス数に制限が設定されていることが原因の場合があります。

解決方法

  1. ホストの仮想メモリーを確認して増やすか、ユーザーのローカル・プロセスの制限とオープン・ファイル・ディスクリプタの制限を確認します。

    たとえば、Linuxで、コマンドulimit -aを使用してユーザー制限を確認し、さらにシステム全体のユーザー制限について/etc/security/limits.confファイルを確認します。

  2. 不要なプロセスを強制終了してOHSを起動します。

証明書チェーンが原因でSSLハンドシェイクが失敗する

Internet Explorerなどの特定のブラウザでは、SSLハンドシェイクが機能するように証明書チェーン全体をブラウザにインポートする必要があります。証明書が中間CAによって発行されている場合、証明書チェーン全体がブラウザで利用できることを確認する必要があり、そうしないとハンドシェイクが失敗します。チェーンの中間証明書の期限が切れている場合、チェーンのすべての証明書(OHSサーバーなど)とともに更新する必要があります。

解決方法

Oracle HTTP Server用にSSLを構成する場合、証明書チェーン全体(ルートCA、中間CAなど)のインポートが必要な場合があります。