[Server] システムディスク容量が圧迫してきた時の対処方法

2015年9月17日

Tips サーバー テクノロジー

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処理をパイプでくっつけて詳細を確認してみてもいいと思うので、この辺の手順を覚えておいたほうが良さそうだ。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。