ApacheのシスログがPHPのwarningやerrorが記述されていくために、想定外のログ容量が発生する事があるが、
その時に、ディスク容量を食いつぶしてしまうリスクがある。
標準構成としては、システム領域と、サービス領域をパーティション分割しておく事を推奨されているが、
これは、システム領域を食いつぶしても、サービスの稼働領域を守るためだと思われる。
しかし、シスログ領域が100%になってしまうと、ログが取得できなくて、いざというときに
原因調査が行えなくなって結局は困ってしまう。
代替の原因は、PHPのwarningアラート
# Debian系の場合
/var/log/apache2/***
# CentOS系の場合
/var/log/httpd/***
上記の中に膨大な容量に膨らんだログ・ファイルが存在するはずだ。
環境ないに バックアップするストレージサーバーが存在していれば、そのサーバーに対してrsync --remove-source-filesなどで、移動してしまえば、ディスク内から大容量ファイルが無くなる・・・
移動、削除するファイルが現行ファイルの場合は、容量削減にならないので要注意!
Apacheの場合、accessログファイルとerrorログファイルが1つのvertualhostについてログ書き込みとしてアクセスする設定になっているが、どうやら、容量の肥大化したログファイルを削除しただけでは、じつはdfコマンドをたたいて確認すると、容量が減っていない事がある。
「error.log.1」のようにログローテーション処理が行われたあとのログファイルの場合は、ファイルを移動や削除した段階で問題なく、容量削減できているのだが、「error.log」というapacheから現在アクセスされているファイルの場合は、モジュール側でメモリ内に展開されている状態のようで、dfコマンドでも容量が全く減らない。
これを解決するには、対象のモジュールをkillする以外に方法はないようだ。
やるべき事
apacheをkillしてしまっては、サービスを停止する事になるので、それこそ障害が発生してしまうので、行うべき内容としては、apacheの再起動という事です。
通常のように
$ service apache2 restart
$ /etc/init.d/apache2 restart
としてもいいのだが、
安全に行うにはgracefulという処理で再起動した方がいいようだ。
# ゆるやかな再起動
$ apachectl -k graceful
# 急な再起動
$ apachectl -k restart
こうすることでdfコマンドでみると容量が削減されていることも確認できる。
メモリ展開を確認してみる。
dfコマンドで容量が減っていない場合、どのモジュールでリソースが保持されているか確認するコマンドは
$ lsof
とコマンドを打ち込むと膨大にリソース状況が表示されて確認することができる。
特定のモジュールであればgrep処理をパイプでくっつけて詳細を確認してみてもいいと思うので、この辺の手順を覚えておいたほうが良さそうだ。
0 件のコメント:
コメントを投稿