LINUX運行メンテナンス実戦ケースのファイルは削除されたが、空間は問題の分析と解決方法を解放しない。
运维の监视システムから通知が来て、1台のサーバーの空间がいっぱいになったことを报告して、サーバーにログインして见て、ルートのパーティションは确かに空间がなくて、下図のようです:
ここではまず、Linuxにはごみ箱機能がないため、削除するすべてのファイルがシステム/tmpディレクトリに移動し、定期的に/tmpディレクトリのデータを消去するサーバの削除ポリシーについて説明します。このポリシー自体は問題ありませんが、このサーバのシステムパーティションには/tmpパーティションが個別に分割されていないことが確認されました。これにより、/tmp下のデータはルートパーティションの空間を占有しています。問題が見つかった以上、/tmpディレクトリの下の大きなデータを削除すればいいです。次のコマンドを実行して、/tmpの下で最大の3つのデータファイルを確認します。下図に示します。
[root@localhost~ ]# du -s /tmp/*|sort -nr|head -3
69206016 /tmp/access_log
36 /tmp/hsperfdata_root
36 /tmp/hsperfdata_mapred
コマンド出力で/tmpディレクトリの下に66 Gサイズのファイルaccess_があることを発見log、このファイルはapacheによって生成されたアクセスログファイルであるべきで、ログサイズから見ると、apacheログファイルを整理するのは久しぶりであるべきで、基本的にこのファイルによるルート空間が満員であると判定し、このファイルが削除できることを確認した後、以下の削除操作を実行する。
[root@localhost ~]# rm /tmp/access_log
次に、次の図に示すように、システムのルートパーティション領域が解放されているかどうかを確認します。
出力からルートパーティション空間が解放されていないことがわかりますが、これはどういうことですか?
2、解決構想一般的にファイルを削除してもスペースが解放されない場合はありませんが、例外もあります。例えば、ファイルがプロセスによってロックされているか、このファイルにデータを書き続けているプロセスがあるなどです。この問題を理解するには、Linux下のファイルのストレージメカニズムとストレージ構造を知る必要があります。
1つのファイルのファイルシステムにおける格納は2つの部分に分けられる:データ部分とポインタ部分、ポインタはファイルシステムのmeta-dataに位置し、データが削除されると、このポインタはmeta-dataから消去され、データ部分はディスクに格納され、データに対応するポインタはmeta-dataから消去された後、ファイルデータの部分的に占有する空間は上書きされて新しい内容を書き込むことができて、accessを削除することが現れますlogファイルの後、空間がまだ解放されていないのは、httpdプロセスがこのファイルにコンテンツを書き込み続けているためであり、access_を削除したにもかかわらずlogファイルですが、ファイルに対応するポインタ部分はプロセスロックのためmeta-dataからクリアされていません。ポインタが削除されていないため、システムカーネルはファイルが削除されていないと考えています。そのため、dfコマンドでクエリースペースが解放されていないのも不思議ではありません。
3、問題の調査問題を解決する考えがある以上、次にプロセスがacessに向かっているかどうかを見てみましょう。logファイルにデータを書きます。ここではLinuxのlsofコマンドを使用する必要があります。このコマンドで、削除されたがアプリケーションによって占有されているファイルのリストを取得できます。コマンドは下図のように実行されます。
出力結果から、/tmp/acessがわかる.logファイルはプロセスhttpdによってロックされ、httpdプロセスはこのファイルにログデータを書き込み続けている。7列目から分かるように、このログファイルのサイズは70 Gにすぎず、システムルートパーティションの総サイズは100 Gである。これにより、このファイルはシステムルートパーティション空間の枯渇を招いた元凶であり、最後の列の「deleted」状態で、このログファイルが削除されたことを示している。しかし、プロセスはまだこのファイルにデータを書き込み続けているため、スペースは解放されていません。
4、問題解決ここまで問題は基本的に明らかになりました。このような問題を解決する方法はいろいろあります。最も簡単な方法はhttpdプロセスを閉じるか再起動することです。もちろんオペレーティングシステムを再起動することもできますが、これは最善の方法ではありません。このようなプロセスに対してファイルのログを書く操作を続け、ファイルが占有するディスク空間を解放するには、オンラインでこのファイルを空にするのが一番いい方法です。次のコマンドで実行できます。
[root@localhost ~]# echo " " >/tmp/acess.log
この方法により、ディスク領域はすぐに解放されるだけでなく、プロセスがファイルにログを書き続けることを保障することができ、この方法はApache、Tomcat、NginxなどのWebサービスで生成されたログファイルをオンラインでクリーンアップするためによく使用される。読んでくれてありがとう。皆さんの役に立つことを望んでいます。引き続き注目してください。私たちはもっと優秀な文章を分かち合うように努力します。
以上はLINUX运维の実戦の実例のファイルはすでに削除してしかし空间は问题の分析と解决方法を釈放しないで、本文は“技术の成就の梦想”のブログから出て、転载をお断りします!読んでくれてありがとう。皆さんの役に立つことを望んでいます。引き続き注目してください。私たちはもっと優秀な文章を分かち合うように努力します。