CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
みなさん、こんにちは。前回の「きほんのトラブルシューティング」は、ネットワークトラブルが発生した際に最初に使うであろう「超基本的なコマンド」をおさらいしました。今回は、ディスク容量に関するトラブルシューティングです。まずは、ディスク容量を確認するときに使う「超基本的なコマンド」を見ていきましょう。
WebサーバーやDBサーバーを運用し続けていると、突然のサービス停止に陥ることがあります。今まで普通に稼働していたものが突如停止していたり、サービスを再起動しようとしても再起動できなかったりすると、とても焦りますよね。このようなトラブルは、ディスク容量の枯渇が原因となっているかもしれません。サービス立ち上げ時には余裕のあったディスク容量も、アクセスログを適切にローテートするよう設定していなかったり、バイナリログを適切に切り捨てるよう設定していなかったりするだけで、瞬く間にその容量を使い切ってしまいます。運用設計で適切な検討ができていなかったことを悔やみつつ、慌てずに、次のようなコメンドを駆使してトラブルを解決しましょう。ここでまず使うコマンドは、`df` と `du` です。
ファイルシステム全体のディスク容量を確認するために、真っ先に使うであろうコマンドです。
`-h` オプションをつけて、適当な単位で表示させることが多いでしょう。
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 15G 7.6G 6.5G 54% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/vdb 99G 33G 62G 35% /mnt/vdb
`Use%` がディスク使用率です。上記の場合、54%なので半分ほど空きがありますね。
こちらは、ファイルが使用しているディスク容量を調べるコマンドです。ファイルまたはディレクトリのディスクの使用量を表示するもので、現実的なファイルサイズより少し大きく表示されます。
例えば、/var 直下のサブディレクトリごとの使用量を確認するには、以下のようにします。
$ du -shx /var/*
`-s` オプションは、指定したディレクトリごと(ここでは /var 直下のサブディレクトリごと)に合計サイズのみを表示し、それより下のディレクトリについてはそれぞれ表示しないようにするオプションです。
さらに、ディスク使用量順にソートするには、以下のようにします。こうすると、大きなファイルを見つけやすくなりますね。
$ du --max-depth=1 /var/ | sort -nr
`--max-depth=1` は、深さレベルを指定するオプションです。この場合は1階層目までです。`du` で出力された結果をパイプ(|)で繋いで、`sort` を使ってソートしています。
ちなみに、ファイルサイズが100M超、というように、見つけ出すべき対象が明確になっている場合は、 `find` を使ったほうが効率的かもしれません。
$ find /var -size +100M -exec ls -lh {} \;
容量の大きいファイルが特定できたら、`rm` コマンドで削除しましょう。
ただし、`rm` コマンドで削除したファイルが何らかのプロセスで使用されている場合には、実際はファイルシステム上から削除されていません。それだけでは空き容量の確保になっていませんので、使用中のプロセスを `kill` する必要がある点に注意しましょう。
また、`rm` コマンドでの削除以外に、キャッシュやテンポラリデータなども削除するとよいでしょう。例えば、yum によるインストールやアップデートで使用したデータキャッシュは、以下のように削除します。
$ du -sh /var/cache/yum 178M /var/cache/yum $ yum clean all
`du` コマンドや `rm` コマンドは、CPUを使用し、ディスクI/Oも発生するので、システム全体に負荷を掛けてしまいます。負荷をなるべく低減するために、コマンド実行の相対的な優先度を指定できる、`nice` や `ionice` といったコマンドがあります。
`nice` コマンドは、実行優先度を指定できます。例えば、もっとも優先度低くコマンドを実行するには、以下のようにします。
$ nice -n 19 du --max-depth=1 /var/ | sort -nr
`-n` オプションで指定する値をナイス値と呼び、-20〜19の値を指定することができます。−20がもっとも優先度が高く、19は逆にもっとも優先度が低くなります。ちなみに、指定のない場合のナイス値は、10です。
一方、`ionice` コマンドは、ディスクI/Oの優先度を指定して実行できます。
$ ionice -c 2 -n 7 du --max-depth=1 /var/ | sort -nr
`-n` オプションには、0〜7を指定でき、0がもっとも優先度が高く、7がもっとも優先度が低くなります。また、`-c` オプションは、1(Real Time)、2(Best Effort)、3(Idle)を指定できます。
今回は、ディスク容量を確認する時に使う基本的なコマンドとして、`df` と `du` を見ました。また、それらを使用する際に、負荷を低減するためのコマンドとして、`nice` と `ionice` を紹介しました。
突然のサービス停止でも、これらのコマンドを使って、ディスク容量の枯渇が原因だと特定できれば、焦らずに落ち着いて対処できそうですね。
それでは、また!
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes