私たちのアプリケーション サーバー (sunOS) は常にディスクがいっぱいになります。当社のインフラストラクチャ チームは、「tail -f」プロセスが多すぎることが原因であると述べています。アプリはログ ファイルを頻繁にローテーションするため、リンク切れやディスク容量不足が発生しましたか? これは今まで聞いたことがありません。そのコマンドは本当にディスクがいっぱいになるのですか?
2 に答える
ファイルが占有するスペースは、そのファイルへのすべての参照がなくなるまで再利用できません。したがって、ファイルを開いているプロセスは、ファイルがディスクから削除されるのを防ぎます。
tail -f
たとえば、ファイルに続くアクティブ。
ディスク領域を解放するためにこれらのファイルを削除する必要がある場合(たとえば、ファイルが非常に大きい、またはファイルが非常に多いため)、ファイルへの参照を保持するプロセスが周囲に存在すると、ファイルの削除が妨げられ、最終的にディスクがいっぱいになります。上。
他の回答のコメントに応じて編集します。
あなたが報告した診断結果は、Adam と私が説明した状況で見られると予想されるものとまったく同じです。ディスクが使用中であることをdf
レポートし、フォルダでのみ表示されるレポートを作成します。この不一致は、フォルダーから削除された価値のあるファイルがあるためですが、一部のプロセスがそれらへの参照を保持しているため、ディスクから物理的に削除することはできません。56G
du
10G
46G
これを自分で試すのは簡単です。安全に遊べるファイルシステムを見つけて、巨大なファイルを作成します。ファイルを開いて無限ループに入る C プログラムを作成します。次に、次の操作を行います。
- プログラムを開始する
- の出力を確認してください
df
rm
ファイル- の出力を
df
もう一度確認してください - プログラムを停止する
- の出力を
df
もう一度確認してください
df
ファイルを ing した後に の出力が変化しないことがわかりrm
ますが、プログラムを停止すると変化します (したがって、ファイルへの最後の参照が削除されます)。
これが起こっているというさらに多くの証拠が必要な場合は、/proc
ファイルシステムから情報を取得できる場合があります。具体的には、いずれtail -f
かのプロセス (または原因と思われる他のプロセス) の PID を見つけ、ディレクトリ/proc/<pid>/fd
を調べて、開いているすべてのファイルを確認します。
/proc/<pid>/fd
(私は自宅に *nix を持っていないので、この状況で何が表示されるかを実際に確認することはできません)
tail
ファイルの終わりを表示するコマンドであり-f
、リアルタイムで実行し、ファイル自体が変更されるたびに表示を更新します。ログファイルをリアルタイムで表示できます。
tail
次の 2 つの方法で問題が発生する可能性があります。
- が対話型コンソールではなくファイルへの書き込みに悪用されている場合
tail -f
、それはファイルをコピーする非効率的な手段であり、重複したログを作成しています。 tail -f
ログ ファイルは存続するため、ログ ファイルを自動的に削除しようとするメンテナンス タスクは失敗します。これにより、古いファイルが期限切れにならないようにすることで、ログ ファイルのローテーションが無効になります。
インフラストラクチャ チームが 1 週間未満のファイルへのアクセスについて不満を言っている場合は、何か問題が発生して必要になった場合に備えて十分なログを維持できないため、より多くのドライブ スペースや冗長性の低いログ戦略が本当に必要です。追跡。ログがそれよりも古い場合は、適切なポイントがある可能性がありtail
、ファイルを開いたままにしておく他のものと同様に、過度の使用により、ファイルがタイムリーに削除されない可能性があります。
コマンドだけでディスクがいっぱいになることはほとんどありませんが、ディスクの衛生操作を妨げている可能性があります。