
実稼働 Web サーバーには、ファイルシステム全体からファイルを tar で圧縮する必要がある cron ジョブがあります。このジョブは約 105 分間実行され、その間に Apache はスワップを開始します。これは、数ギガバイトのファイルをすべて読み取った結果、ファイルシステム キャッシュのメモリ量が拡張されたためです。
tar が読み取るデータは、ファイルシステム キャッシュに存在する必要はありません。tar ファイルに格納され、それだけです。 のように記述できるものはありますかtar cvf whatever/ --no-system-file-buffer-reads
? を読んでも、man tar
役立ちそうなことは何も見つかりません。
これは「先生、そのように動くと痛いんです! だから、そのように動かないでください」という状況として見られる可能性があることを指摘する必要はありません。何らかの方法でファイルを tar ファイルにダンプする必要があるため、そのように動かないという選択肢はありません。
答え1
この質問には答えがあると思いますここ:
そこにはキャッシュなしユーティリティは、ionice や nice などのコマンドの先頭に追加できます。これは、 開いている呼び出しにフラグ
posix_fadvise
を追加するライブラリを事前にロードすることによって機能します。POSIX_FADV_DONTNEED
簡単に言えば、これはカーネルにそのファイルにはキャッシュが必要ないことを知らせるものであり、カーネルは通常そのファイルをキャッシュしません。ここ技術的な詳細については。
これは、巨大なコピー ジョブに非常に役立ちます。たとえば、実行中のシステムへの影響を最小限に抑えながら、数テラバイトのディスクをバックグラウンドでバックアップしたい場合など、 と一緒に実行できます
nice -n19 ionice -c3 nocache cp -a /vol /vol2
。