回答:
次のlogrotate
ような設定を使用して、を介して最初に回転します。
/path/to/the/log {
missingok
notifempty
sharedscripts
daily
rotate 7
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
compress
}
次に、真夜中にcronジョブを作成して、ローテーションされたファイルを削除します。
30 2 * * * nice -n 19 ionice -c2 -n7 rm -f /path/to/the/log/file.1
: > /path/to/monthly.log
操作でファイルを切り捨て/ゼロにします。その後、Apacheプロセスを再起動し、ログローテーションを設定して、将来これが発生しないようにします...
ただし、これは頻繁に発生します。
参照:IO /ロードをスラッシングせずにLinuxで100GBファイルを削除する方法はありますか?
:
。あなたができること> /path/to/monthly.log
noop
いますが、教育の観点からはより理にかなっています。
true > /path/to/monthly.log
同じことはしないだろう、そしてそれはそれほど古風ではあり:
ませんか?
データが必要ない場合は、/ dev / nullを使用して切り捨てます。
cat /dev/null > monthly.log
ウェブサーバーは切り捨て後もファイルにデータを書き込み続けるため、ウェブサーバーを再起動する必要はありません(rm monthly.log
ファイルを削除するのとは異なります)。
差し迫った危機を解決した後、クアンタが示唆したように対数回転を検討してください。これが二度と起こらないようにする必要があります。CentOSでは、デフォルトでApacheログファイルがすでにローテーションされていることに注意してください
また、syslogを使用してWebログを送信することも検討してください(/usr/bin/logger
たとえば、を使用)。通常、syslogを使用して作成されたログにもlogrotationがセットアップされています。
>logfile
猫のための必要性
ext3ファイルシステムを使用している場合は、ext4への切り替えを検討してください。
ext3は、個々の4kブロックの場所を保存するため、大きなファイルの削除が遅くなる可能性があります。50GiBファイル(50 * 1024 ^ 3バイト)は13107200ブロックを占有し、各ブロックは32ビットブロック番号としてiノードテーブルに記録されます。 、ファイルのコンテンツがディスク上のどこにあるかを追跡するためだけの合計50MiBの簿記データ。その大きなブロックリストは、多くの間接ブロックに散在している可能性があり、それらはすべて、ファイルが削除されたときに更新する必要があります。間接ブロックすべてにアクセスしようとしているディスクが、おそらく遅延の原因です。
一方、Ext4は、最大128MiBの「エクステント」でファイルを割り当てます。その50GiBファイルは、13107200個の個別のブロック番号ではなく、400個のエクステントレコードを使用してiノードテーブルに記録できるため、ファイルを削除するときに必要なディスクI / Oの量が大幅に削減されます。
既存のext3ファイルシステムをインプレースでext4に変換すると、エクステントを使用して新しいファイルが割り当てられますが、既存のファイルは引き続きブロックリストを使用します。このchattr +e
コマンドを使用して、エクステントを使用して既存のファイルを再割り当てできます。パフォーマンス面では、これはファイルのコピーを作成してから元のファイルを削除することに匹敵します。
この問題は、Apache Webサーバーのユーザーよりもディスク操作の優先度が高い特権ユーザーからファイルを削除しているためだと思われます。ログファイルを削除する方法(rm -fまたは>で切り捨て)を選択する方法に関係なく、ディスクプライオリティ操作を最小値に下げる必要があります。
ionice -c3 rm -f filename.log