大容量ログファイルにtail -fを使用できますか?

大容量ログファイルにtail -fを使用できますか?

エラーがあるかどうか、大容量ログファイル(1GBに近い)を監視したいと思います。私はこれがリアルタイムに近いことを願っています(数秒遅れても大丈夫です)。私の計画はを使用することですtail -f | grep。長期間(たとえば、0バイトから1GBまで)を実行するときにこのアプローチを使用すると、パフォーマンスの問題はありますか?この種のモニタリングの標準的な慣行はありますか?これを行うには、Solaris 10で利用可能な標準のUnixコマンドを使用したいと思います。

可能であれば、私のファイルはスクロールされるかもしれませんが、それでも解決しなければならない問題があります:)。tail -F()を使用することは、私が実行したいサーバーがそれをサポートしていない--follow=nameため、私にとってはオプションではありません。-F私の計画は、このテールを開始し、ファイルがスクロールされたことを確認するためにポーリングするスクリプトを使用することです。その場合は、テールを終了して再起動してください。もっと良い方法がありますか?

ベストアンサー1

私のLinuxシステム(GNU coreutils 8.12)では、1システムコールを使用してほとんどのファイルをすばやくスキップするために1をチェック(使用strace)できます。tail -flseek

lseek(3, 0, SEEK_CUR)                   = 0
lseek(3, 0, SEEK_END)                   = 194086
lseek(3, 188416, SEEK_SET)              = 188416

これは、トレースファイルのサイズがとにかく重要ではないことを意味します。

おそらく、これがあなたのシステムで動作していることを確認できます。 (もちろんそうしなければならないようです。)

— 1. 準備ができたときに
undocumented を使用して inotify サポートを無効にしてみました。---disable-inotify

おすすめ記事