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の値を下げます。

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

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

解決方法

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

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

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

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

リライト・ログ

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

スクリプト・ログ

このログ・ファイルでは、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を使用する必要があります。

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

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

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

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

Linuxの場合:

httpd.confで、Mutex fnctl:fileloc defaultMutex sysvsem defaultに変更します。ここで、filelocはディレクティブLockFile (2箇所)の値です。

Solarisの場合:

httpd.confで、Mutex fnctl:fileloc defaultMutex pthread defaultに変更します。ここで、filelocはディレクティブLockFile (2箇所)の値です。

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

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

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

低速なファイル・システムに置かれた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%ずつ増加させてください。

mod_securityがRHELまたはOracle Linux 7で有効にされているときにOracle HTTP Serverが起動に失敗する

Red Hat Enterprise Linux (RHEL)またはOracle Linux (OL) 7において、mod_securityOracle HTTP Serverで構成されている場合、Oracle HTTP Serverは起動に失敗します。このエラー状態は、シンボリック・リンク/lib64/liblzma.so.0がないために発生します

生成されたエラーは次のようになります。

iblzma.so.0: cannot open shared object file: No such file or directory
解決方法
  1. rootユーザーでログインします。

  2. シンボリック・リンク、/lib64/liblzma.so.0を作成するには、次のコマンドを実行します。

    cd /lib64 
    ln -s liblzma.so.5.0.99 liblzma.so.0 
  3. symlinkを次のように検証します。
    ls -al *liblzma*
  4. rootを終了します。

  5. Oracle HTTP Serverを起動します。

    たとえばstartComponent.sh ohs1で、ここでohs1は起動するOracle HTTP Serverインスタンスとなります。

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)証明書と置き換えます。

  • 回避策: MD5がサポートされた証明書を有効にするには、ohs.plugins.nodemanager.propertiesファイル内のORACLE_SSL_ALLOW_MD5_CERT_SIGNATURES環境変数を1に設定します。

Oracle HTTP Serverで環境変数を設定するには、「環境変数の構成プロパティ」を参照してください。

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

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ファイルを確認します。

    プロセスの制限値を増やすには、Linuxで次のコマンドを使用します:

    $ ulimit -u xxxx

    オープン・ファイル(ファイル・ディスクリプタ)の制限値を増やすには、Linuxで次のコマンドを使用します:

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

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

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

解決方法

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