WEBGUARDIAN V3.5 よりキャッシュ機能が追加されておりますが、本機能をご利用いただく際、
WEBGUARDIAN システムの機能停止が発生する可能性がある問題が確認されました。
大変お手数ではございますが、WEBGUARDIAN のキャッシュ機能をご利用のお客様は、
下記をご参照のうえご対応いただきますようお願いいたします。
1 対象製品とバージョン
本注意事項は、以下の製品・バージョンを対象としております。
製品名 |
バージョン |
WEBGUARDIAN |
3.5.00 ~ 3.6.00 (Linux版) |
2 内容
WEBGUARDIAN のキャッシュ機能では、キャッシュ保存ディレクトリ内に
WEBGUARDIAN が処理したウェブコンテンツをキャッシュすることで、ウェブアクセスを高速化することができます。
しかし、このキャッシュ機能について以下 (1)、(2) の不具合が確認され、正常な運用ができなくなる可能性があります。
(1) キャッシュ保存ディレクトリの制限値を超えるデータが保存されることが原因で、システムの負荷が非常に高くなる場合がある
WEBGUARDIAN のキャッシュ機能では Apache の mod_cache モジュールを利用しており、
キャッシュ保存ディレクトリを管理する手段として htcacheclean というプログラムを利用しています。
しかし、このプログラムではキャッシュサイズ計算時にサブディレクトリのサイズが考慮されず、
また、キャッシュファイルのディスク使用量をブロック単位で計算していないため、
キャッシュの保存量の制限値超過が大きくなる場合があります。
制限値を超えてキャッシュが保存され続けるため、ディスク容量および inode を大量に使用し、
システムの負荷が非常に高くなる場合があります。
場合によっては inode が枯渇して不要ファイルの削除ができなくなり、WEBGUARDIAN の機能が停止する可能性があります。
(2) 誤ったキャッシュレスポンスにより、ウェブコンテンツが正常に取得できない場合がある
WEBGUARDIAN のキャッシュ機能に使用している Apache の mod_cache モジュールにつきましては、
非対応の HTTP レスポンス「206 Partial Content」をキャッシュするという不具合 (Bug 49113) がございます。
「206 Partial Content」レスポンスをキャッシュした場合、後続リクエストに対して 206 のキャッシュを応答し、
ウェブコンテンツが正常に取得できなくなる場合があります。
3 回避策
(1) の事象につきましては、キャッシュ機能をオフにしていただくか不具合が改修されるまではシステム停止のリスクが伴います。
キャッシュ機能をご利用いただく場合は、システム停止のリスクを軽減するため、
下記 a~f の回避策のうち b~f を必ず実施していただきますようお願いいたします。
さらに a の回避策を実施していただくことで、より高い効果が期待できます。
※本回避策につきまして、理論上不具合が回避できる設定値を案内しておりますが、
詳細な効果検証は行えておらず、全てのお客様について必ず効果があるといったお約束はできかねます。
a. キャッシュ保存専用の独立したパーティションを使用する
キャッシュ保存ディレクトリの空き容量、inode 数が枯渇した場合でも他の部分の動作に影響が出ないように、
キャッシュ保存専用に独立したパーティションを作成し、そちらをキャッシュ保存ディレクトリに設定します。
キャッシュファイル数が増えすぎて削除処理による負荷が上がらないよう、
パーティションのサイズは 4GB 以下に設定してください。
<設定方法>
キャッシュ保存専用のパーティションを作成し、
管理画面 [共通] - [検査サーバー管理] - [個別設定] -ウェブ検査サーバの[設定] - [キャッシュ設定]
にて「キャッシュ保存ディレクトリ」に設定します。
b. CacheDirLength と CacheDirLevels の設定値を小さくする
Apache の mod_cache モジュールがサブディレクトリのサイズを考慮しない仕様への対応として、
設定ファイルの CacheDirLength および CacheDirLevels の値を変更することでサブディレクトリの作成数を削減します。
なお、CacheDirLength のデフォルト値は 2、CacheDirLevels のデフォルト値は 3 です。
<設定方法>
管理サーバの下記設定ファイルを直接編集し、設定を追加します。
設定ファイル:
/opt/Guardian/Admin/etc/admin/server/<サーバーID>/httpd.conf
※<サーバーID> は管理画面 [共通] - [検査サーバー管理] - [個別設定] にて種別:ウェブの「ID」列より確認可能です。
追記内容:
CacheDirLength 1
CacheDirLevels 2
設定ファイル編集後、管理サーバで以下のコマンドを実行します(検査サーバに設定内容を反映し、検査サーバのサービスを再起動します)。
# /opt/Guardian/Admin/support/pushWebWG -r httpd
c. キャッシュ保存ディレクトリ制限値を小さくする
ディスク容量および inode が枯渇しないように、キャッシュ保存ディレクトリの制限値に余裕を持たせたサイズを指定します。
目安としまして、パーティションサイズの 75%以下、かつ 3GB 以下の値を設定してください。
<設定方法>
管理画面 [共通] - [検査サーバー管理] - [個別設定] - ウェブ検査サーバの[設定] - [その他] にて「キャッシュ保存ディレクトリ制限値」を
キャッシュ保存ディレクトリがあるパーティションサイズの 75% 以下、かつ 3GB 以下になるように設定してください。
d. メンテナンス間隔をデフォルト値に戻す
キャッシュ保存ディレクトリ制限値を超えるキャッシュの量をできるだけ抑えるため、キャッシュ削除処理を頻繁に実行するよう設定します。
キャッシュ保存ディレクトリのメンテナンス間隔をデフォルトから変更している場合は、初期値の 30 分に再設定してください。
<設定方法>
管理画面 [共通] - [検査サーバー管理] - [個別設定] - ウェブ検査サーバの[設定] - [その他] にて「メンテナンス間隔」を 30 分に設定してください。
e. 最小キャッシュ保存サイズを大きくする
デフォルトの最小キャッシュ保存サイズは 1 バイトですが、この設定の場合、inode 数の消費がディスク使用量に比べて大きくなります。
inode 数の枯渇を避けるため、最小キャッシュ保存サイズを、デフォルトの 1 バイトから 8 Kバイトに変更してください。
<設定方法>
管理画面 [共通] - [検査サーバー管理] - [個別設定] -ウェブ検査サーバの[設定] - [キャッシュ設定] にて「最小キャッシュ保存サイズ」を 8 Kバイト に設定してください。
f. 最大キャッシュ有効時間を短くする
最大キャッシュ有効期間内のキャッシュファイルのみでサイズ上限を超えた場合、削除処理の負荷が高くなるため、
最大キャッシュ有効時間をデフォルトの 1日(=86400 秒)から 1時間(=3600 秒)に変更してください。
<設定方法>
管理画面 [共通] - [検査サーバー管理] - [個別設定] - ウェブ検査サーバの[設定] - [キャッシュ設定] にて「最大キャッシュ有効時間」を 3600 秒に変更してください。
(2) の事象につきましては、恐れ入りますが暫定的な回避策の用意ができておりません。
(1) の回避策が難しい場合、または (2) の不具合を許容できない場合は、
WEBGUARDIAN のキャッシュ機能をオフにして運用していただくようお願いいたします。
管理画面 [共通] - [検査サーバー管理] - [個別設定] - ウェブ検査サーバの[設定] - [キャッシュ設定] にて「キャッシュ機能」をオフに設定しますと、
キャッシュ機能が無効となります。
なお、恒久的な対策としましては、本事象を改修するためのパッチを提供させていただく予定となります。
リリースされた際は下記コンテンツに掲載いたします。提供予定時期は未定となります。
【GUARDIAN】GUARDIANWALL、WEBGUARDIAN リビジョンアップ情報