E Oracle HTTP Serverのトラブルシューティング
Oracle HTTP Serverの使用時に発生する可能性のあるいくつかの一般的な問題をトラブルシューティングするヘルプがあります。
- ポートの競合によりOracle HTTP Serverの起動に失敗する
Oracle HTTP Serverがポートの競合により起動できない場合、文字列[VirtualHost: main] (98)Address already in use
を含むメッセージが生成されます。このエラー状態は、Oracle HTTP Serverに対して構成されたリスニング・ポートが、別のプロセスで使用されているものと同じ場合に発生します。 - 多数のhttpdプロセスによるシステムのオーバーロード
システムにあまりにも多くのhttpd
プロセスがオーバーロードされると、通常処理のためのリソースが不足します。これにより、レスポンス時間が遅くなります。マシンが対処できる値までMaxRequestWorkers
の値を下げることができます。 - 1024未満のポートでOracle HTTP Serverの起動時に発生する権限拒否
Oracle HTTP Serverを1024未満のポートで起動しようとすると、文字列[VirtualHost: main] (13)Permission denied: make_sock: could not bind to address [::]:443
を含むメッセージが生成されます。このエラー状態は、これらのポートをバインドするためにroot権限が必要なために発生します。 - ログ・ファイルを使用したエラーの特定
エラーの特定に役立つ、リライト、スクリプト、およびエラーの3つのタイプのログ・ファイルがあります。 - リモート・ホストでのOracle HTTP Server Instanceインスタンスの回復
リモート・ホストのOracle HTTP Serverインスタンスを回復するには、tar
およびuntar
を使用する必要があります。pack.sh
およびunpack.sh
は、このシナリオでは機能しません。 - Oracle HTTP Serverのパフォーマンスの問題
Oracle HTTP Serverの実行中にパフォーマンスの問題が発生する場合があります。このドキュメントには、このようなパフォーマンス関連の問題を説明するトピックがいくつか含まれています。 - DMSの共有メモリーの不足
Oracle HTTP Server DMSに対して必要な共有メモリーの計算が間違っている場合、エラー・ログが表示されます。これらの問題は、DMS共有メモリーのディレクティブをデフォルト値の4096よりも大きく設定するか、問題が解決されるまでディレクティブを50%高く設定し続けることによって解決できます。 - mod_securityがRHELまたはOracle Linux 7で有効にされているときにOracle HTTP Serverが起動に失敗する
Red Hat Enterprise Linux (RHEL)またはOracle Linux (OL) 7において、mod_security
がOracle HTTP Serverで構成されている場合、Oracle HTTP Serverは起動に失敗します。このエラー状態は、シンボリック・リンク/lib64/liblzma.so.0がないために発生します - MD5アルゴリズムを使用して署名された証明書が原因でOracle HTTP Serverの起動に失敗する
Oracle HTTP Serverが、Message Digest 5 (MD5)アルゴリズムで署名された証明書を含むサーバー・ウォレットが原因で起動できない場合、MD5証明書をSecure Hash Algorithm 2 (SHA-2)証明書に置き換えることができます。 - コンポーネントの起動に失敗した場合にノード・マネージャのログにクリア・メッセージが表示されない
Oracle HTTP Server (OHS)コンポーネントの起動に失敗した場合、ORACLE_INSTANCE/servers/COMPONENT_NAME/logs/COMPONENT_NAME.log
に次のエラーが記録されます: - 証明書チェーンが原因でSSLハンドシェイクが失敗する
ポートの競合により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を起動します。
ログ・ファイルを使用したエラーの特定
リライト・ログ
このログ・ファイルは、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.sh
とunpack.sh
が動作しないので、tar
とuntar
を使用する必要があります。
Oracle HTTP Serverのパフォーマンスの問題
Oracle HTTP Serverの実行中にパフォーマンスの問題が発生する場合があります。このドキュメントには、このようなパフォーマンス関連の問題を説明するトピックがいくつか含まれています。
ネットワーク・ファイル・システムに置かれる特別なランタイム・ファイル
Oracle HTTP Serverは内部処理にロック(つまりロック・ファイル)を使用します。これらのファイルはロックが作成されると動的に作成され、ロックが取得または解放されるたびにアクセスされます。これらのファイルが低速なファイル・システム(たとえばネットワーク・ファイル・システム)に置かれると、サーバーのパフォーマンスが低下する場合があります。この問題を回避するには:
Linuxの場合:
httpd.confで、Mutex
fnctl:fileloc default
をMutex
sysvsem
default
に変更します。ここで、fileloc
はディレクティブLockFile
(2箇所)の値です。
Solarisの場合:
httpd.confで、Mutex
fnctl:fileloc default
をMutex 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
ではなく、WLSRequest
をON
に設定することで解決できます。
共有ファイル・システム上で生成されたインスタンス
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_security
がOracle HTTP Serverで構成されている場合、Oracle HTTP Serverは起動に失敗します。このエラー状態は、シンボリック・リンク/lib64/liblzma.so.0がないために発生します
生成されたエラーは次のようになります。
iblzma.so.0: cannot open shared object file: No such file or directory
-
rootユーザーでログインします。
-
シンボリック・リンク、/lib64/liblzma.so.0を作成するには、次のコマンドを実行します。
cd /lib64 ln -s liblzma.so.5.0.99 liblzma.so.0
-
symlinkを次のように検証します。
ls -al *liblzma*
-
rootを終了します。
-
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で実行可能なプロセス数に制限が設定されていることが原因の場合があります。
解決方法
- ホストの仮想メモリーを確認して増やすか、ユーザーのローカル・プロセスの制限とオープン・ファイル・ディスクリプタの制限を確認します。
たとえば、Linuxで、コマンド
ulimit -a
を使用してユーザー制限を確認し、さらにシステム全体のユーザー制限について/etc/security/limits.conf
ファイルを確認します。プロセスの制限値を増やすには、Linuxで次のコマンドを使用します:
$ ulimit -u xxxx
オープン・ファイル(ファイル・ディスクリプタ)の制限値を増やすには、Linuxで次のコマンドを使用します:
$ ulimit -n xxxxx
- 不要なプロセスを強制終了してOHSを起動します。
証明書チェーンが原因でSSLハンドシェイクが失敗する
Internet Explorerなどの特定のブラウザでは、SSLハンドシェイクが機能するように証明書チェーン全体をブラウザにインポートする必要があります。証明書が中間CAによって発行されている場合、証明書チェーン全体がブラウザで利用できることを確認する必要があり、そうしないとハンドシェイクが失敗します。チェーンの中間証明書の期限が切れている場合、チェーンのすべての証明書(OHSサーバーなど)とともに更新する必要があります。
解決方法
Oracle HTTP Server用にSSLを構成する場合、証明書チェーン全体(ルートCA、中間CAなど)のインポートが必要な場合があります。