web-dev-qa-db-ja.com

tarはバッファに大量のメモリを使用します-回避策?

私はtaringしていて、バックアップのためにUbuntu ServerVPSで一連のファイルとディレクトリを圧縮しています。 1GBのRAMと128MBのスワップ(これ以上追加することはできません-OVHは仮想化ソフトウェアとしてOpenVZを使用します))しかなく、tarを実行するたびに1トンを使用しますバッファ用のメモリが不足しているため、Nice -n 10を使用している場合でも、他のすべてがスワップアウトされます。

tarに小さなバッファを使用させ、そのメモリ使用量を減らす方法はありますか?バックアップが特定のサイズになると、tarにバッファ用の十分なメモリがないため、サーバーがダウンするのではないかと心配しています。

圧縮にbzip2を使用していますが、-4オプションを使用してメモリ使用量をすでに制限しています。

編集:htopをしばらく実行した場合、tarは次のようになります。

enter image description here

ここに完全なgifへのリンクがあります

編集2:これが私が使用しているtarコマンドです:

Nice -n 20 tar --exclude "*node_modules*" --exclude "*.git/*" --exclude "/srv/www-mail/rainloop/v*"  -cf archive.tar /home /var/log /var/mail /srv /etc
2

実際、あなたの画像はまったく逆のことを示しています。

RES列の下に表示されているように、tarメモリ消費量は非常に少なくなっています。 Linuxがtarコマンドによって読み取られたデータをアクティブにキャッシュしているという理由だけで、RAM使用法表示増加します。これにより、メモリの負荷とダーティページのライトバックが発生します(基本的に、システムは書き込みキャッシュをフラッシュして、必要なより大きな読み取りキャッシュに対応します)、場合によっては、有用なデータがI/Oキャッシュから削除されます。

残念ながら、tar自体はO_DIRECTまたはPOSIX_FADVISE(どちらもキャッシュを「バイパス」するために使用できます)を使用するように指示できないようです。したがって、tarを使用しても、実際の解決策はありません...

2
shodanshok