rsync を本番環境で cron ジョブ (10 分ごと) で実行し、AWS EFS の GB フォルダを 16 GB RAM の VM のローカルストレージに同期します。数日間実行した後、VMにメモリが不足し、バッファ/キャッシュサイズが4 GBを超えることがわかりました。仮想タッチ同期中のフォルダ全体がキャッシュされていることを確認しました。
これを本番環境で実行しているため、仮想マシンの空きメモリが20%未満になるたびに音がする警告システムがあります。
したがって、迅速な修正のためにコマンドを使用してrsyncを実行するたびにキャッシュを消去しますecho 2 > /proc/sys/vm/drop_caches
。
キャッシュをクリアするとパフォーマンスに影響を与えるため、私はこれに完全に反対します。しかし、インターネットにはrsyncタスクを実行した後にキャッシュを消去することを提案する記事はほとんどありません。そのうちのいくつかは次のとおりです。1、2。キャッシュをクリアしないと言う他のリソースがインターネット上にたくさんあります。
ただ考慮rsync
- バフ/キャッシュが高すぎるため、積極的なキャッシュについて本当に心配する必要がありますか?
- 残りの世界はこの問題にどのように対処していますか? rsyncを実行するたびにキャッシュを消去しますか?
私たちが使用するrsyncコマンド
rsync -aA --delete /... /...
答え1
未使用のメモリは無駄になるため、カーネルは空きメモリをバッファキャッシュとして使用できると見なします。アプリケーションにメモリが必要な場合は、必要に応じてすぐに削除できます。
フォルダ全体がキャッシュされると、これはソースファイルとターゲットファイルの比較が非常に効率的であることを意味します。
コマンドrsync
自体は問題ないようです。使用せずに-H
(メモリ集約的になる可能性があります)、タイムスタンプを効果的に保持しています(-t
で暗黙的に-a
)。注目すべき唯一の他の部分は、あなたの場合、rsync
ローカルファイルシステムのある部分から別の部分にコピーするので、更新する必要があるファイルだけが完全にコピーされることです。