tarコマンドの負荷を減らしたい cstreamを使ってみた
今回やりたいこと
tarコマンドを使って、深夜にバックアップを行っているのですが、
バックアップ中にCPU使用率が上昇しアラートが上がってしまい困っています。
これを、なんとかしたい‥
前提として、負荷制御に関するいろいろ
負荷制御する 〜cstream以外の方法
CPU負荷とI/O負荷は違います。
今回制御したいのは、CPU負荷です。
sleepしながらゆっくり実行とかの方法もあるようです。 が、
CPU使用率を下げる目的でSleep(0)を呼び出すのは正しくない気がします。
とのこと。*1
nice(プロセスの優先度を指定するコマンド)を使う方法もありますが、
深夜に実行してるバッチの負荷を下げる目的なので、
今回の目的にはあまり効果がないかもです。
ちなみにI/O負荷を下げる目的では、
ioniceを使ったりする、らしい。*2
負荷を確認する方法いろいろ
下記の記事参考にさせていただきました。
Linuxサーバの負荷や使用率を調査するコマンドと手順 | EasyRamble
TOPコマンドを使いこなしてTOPを狙う。 - コンピュータクワガタ
負荷制御する 〜cstreamについて
cstreamは、ファイルシステムのキャッシュを使わずに書き込んだり、 書き込みの帯域を制限できたり デバイスへの書き込み処理の際にごにょごにょしてくれるもののようです。
です。*3
その他、下記の記事参考にさせていただきました。
tarコマンドを負荷制御(bwlimit指定)して実行する方法 - SHANON Engineer's Blog
大量データを「cstream」で捌く! | ADMAGE blog ―技術者目線のアドテク知識発信ブログ―
Postgresフルバックアップ時の負荷を下げたい | 東京うぇ部
実際に行ったインストール方法、使い方などは、以下の通りです。
本題、cstreamを使って負荷制御
環境
CentOS Linux release 7.0.1406 (Core)
x86_64
cstreamのインストール
rpmでインストール
$ wget http://pkgs.repoforge.org/cstream/cstream-3.1.0-1.el6.rf.x86_64.rpm
$ sudo rpm -ivh cstream-3.1.0-1.el6.rf.x86_64.rpm
yumでインストール
rpmforge-releaseダウンロード
$ wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
RPMforgeリポジトリインストール
$ sudo rpm -ivh rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
ダウンロードしたファイルを削除
$ sudo rm -f rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
rpmforge-releaseアップデート
$ sudo yum -y update rpmforge-release
cstreamインストール
ただinstallするだけだと、el7のrpmが存在しないためインストールできません。
$ sudo yum -y install cstream
読み込んだプラグイン:fastestmirror Loading mirror speeds from cached hostfile * base: ftp.riken.jp * extras: ftp.riken.jp * rpmforge: ftp.riken.jp * updates: ftp.riken.jp パッケージ cstream は利用できません。 エラー: 何もしません
el7のrpmが存在しないため、el6を利用できるよう、下記を追加
$ sudo vi /etc/yum.repos.d/rpmforge.repo
[rpmforge-el6] name = RHEL $releasever - RPMforge.net - dag baseurl = http://apt.sw.be/redhat/el6/en/$basearch/rpmforge mirrorlist = http://mirrorlist.repoforge.org/el6/mirrors-rpmforge #mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge enabled = 0 protect = 0 gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag gpgcheck = 1
インストール
(※yumで負荷の上がる華奢なサーバーなのでniceを使いました。)*4
$ sudo nice -n 19 yum -y install cstream --enablerepo=rpmforge-el6
cstreamを使ってtarのスループットを1MB/secに制御
制御前の処理内容
tar cvzf backup.zip \ -C /var \ www/data/config/ \ www/data/logs/ \ www/html/upload
1MB/secに制御
BW=1 tar cvzf - \ -C /var/ \ www/data/config/ \ www/data/logs/ \ www/html/upload \ | cstream -t $((${BW}*1024*1024)) > \ backup.zip
これでCPU負荷下げることできました。 終わり。