web-dev-qa-db-ja.com

リモートマシンでの素敵なrsync

Rsync + sshを使用してリモートマシンにアクセスする場合、リモートマシンのrsyncプロセスを「ナイス」にする(優先順位を下げる)方法はありますか?

質問を編集して明確にする:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
backups  16651 86.2  0.1   3576  1636 ?        Rs   11:06   0:06 rsync --ser...

(rsync行が削除されました)

これは、通常は午前4時に実行されるバックアップcronジョブですが、たまたま目が覚めたとき(そしてコミットするか、同じマシンでホストされているBugzillaを使用しているとき)、サーバーのパフォーマンスが低下するため、すばやく「ハック」して修正しようとしましたそれは少し。

25
mwalling

--rsync-pathオプション。

rsync --rsync-path="Nice rsync" foo remotebox:/tmp/
35
Hasturkun
  • --rsync-pathオプションを取ると、rsync --rsync-path="ionice -c 3 Nice -n 12 rsync" localDirectory remoteHost:/tmp/
  • 構成ファイルオプションを取ると、ファイル/etc/default/rsyncRSYNC_Nice='17'値とRSYNC_IONICE='-c3'値を変更またはコメント解除できます

両方のionice値は、ハードディスクの優先順位になります

  • 1->リアルタイム
  • 2->ベストエフォート
  • 3->アイドル(他のプロセスがHDを使用していない場合)

Linuxでは、cfqスケジューラのみが実際にIOクラスと優先度を実装することに注意してください。リモートシステム管理者がIOスケジューラnoopdeadline、またはその他のエキゾチックなバリアントを選択している場合、ioniceが実際には何も実行しないことがわかります。 cfqから高いパフォーマンスを得ることができ、さらにcfqを正しく チューニングすることによってIOクラスと優先度を使用できるようにする必要があります

プロセッサの優先順位のNice

  • -20(プロセスに最も有利)
  • (デフォルト10)-nが指定されていない場合
  • 19(プロセスに最も有利ではない)
7

すばやくダーティな解決策は、次のような実際のrsyncバイナリの前に$ PATHをシャドウする 'rsync'と呼ばれる小さなラッパースクリプトを作成することです。

#!/bin/sh
Nice -10 /path/to/proper/rsync $*

または、authorized_keysファイルをセットアップして、rsyncのナイシングを実行します。 (sshキーを使用していると想定)。

例:

command=”/home/user/bin/Nice-rsync.sh" ssh-dss asdf....

/home/user/bin/Nice-rsync.sh

#!/bin/sh
case $SSH_ORIGINAL_COMMAND in
  rsync\ --server*)
    Nice -10 $SSH_ORIGINAL_COMMAND
    ;;
  *)
    $SSH_ORIGINAL_COMMAND
    ;;
esac

HTH

2
pyhimys

-z引数を含めないことで、ネットワークに沿った圧縮を無効にできます。これにより、どちらかの側でCPU時間を節約できます。または、rsyncがチェックサムを使用する方法を変更して、--checksumを確認してください

2
Rory

Rsyncは多くのCPUを使用するべきではありません。もう一方の端から特定の快適さを強制できるとは思えませんが、できることは、rsyncがファイアウォールで使用している帯域幅を制限することです。これにより、最終的にX時間で実行できる処理量が減少します。