プロセスが使用する帯域幅を制限するにはどうすればよいですか?


42

ファイルを毎晩バックアップするCentOS 5.7サーバーがあります。バックアップがネットワークを介して転送されている間、サーバーホストのさまざまなサイトへの訪問者のパフォーマンスが低下することを心配しています。

プロセスの最大許容スループットをネットワークインターフェイスに制限することは可能ですか?SSHベースのファイル転送を利用可能な帯域幅の半分のみに制限したいと思います。これはサーバー側またはクライアント側にあります。つまり、接続を開始するクライアントまたは接続を受信するサーバーのいずれかでこれを実行できれば幸いです。

(残念ながら、バックアップ専用のインターフェースを追加することはできません。使用可能なスループットを増やすことはできますが、それは単にネットワーク転送がより速く完了することを意味しますが、それでも接続中の合計容量を最大にします。)


いくつかの背景

おそらくいくつかの背景が整然としています。戻ると、バックアップ自体を作成するのに十分なローカルスペースがないという問題がありました。SSHFSを入力してください!バックアップは、見かけ上ローカルドライブに保存されるため、Webサーバー自体にはバックアップビットが一切ありません。

なぜそれが重要なのですか?それは由緒あるものの使用を無効にするように見えるのでrsync --bwlimitrsync実際の転送を行っても、されていないことができ、私もバックアップファイルを保存するためのスペースを割くことができないので、それは。

「それでは、なぜバックアップファイルを作成する必要があるのでしょうか。rsyncソースファイルとフォルダだけではないのですか?」「Plesk」という迷惑なものが混在しているからです!これは、利便性のためにPleskを使用する私のクライアント向けWebホストです。そのため、Pleskはバックアップにあらゆる種類の特別な魔法を追加するため、Pleskを使用してバックアップを開始します。これにより、復元手順中にそれを非常に安全に使用できます。

悲しい顔



1
偶然特定の質問に正確に答えていない私の状況の別の可能性は、ioniceプロセスが行うことができる書き込みを調整するために使用することです。SSHFSファイルシステムに書き込みを行っているため、バックアッププロセスのクラスを3に落として、書き込みたい他のプロセスに完全に道を譲ることができます。そうすることで、バックアップ帯域幅を占有するためにサイト訪問者のエクスペリエンスが低下することのない効果が得られます。
ウェズリー

1つの質問、あなたのsshは圧縮を使用していますか?「圧縮はい」を.ssh / configに追加しますか?
ズラトコ

回答:


25

を使用iptablesしてパケットにマークを付け(--pid-owner ...)、次にtcトラフィックのシェーピングに使用できます。また、「-sid-owner」を使用して、そのプロセスのスレッドと子を含めることができます。

http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH

一致 --pid-owner
カーネル 2.3、2.4、2.5 、および2.6 iptablesの
-A OUTPUT -m owner --pid-owner 78
説明 この一致は、それらを担当したプロセスID(PID)に基づいてパケットを一致させるために使用されます。この一致を使用するのは少し難しくなりますが、1つの例は、PID 94がHTTPポートからパケットを送信できるようにすることだけです(もちろん、HTTPプロセスがスレッド化されていない場合)。または、特定のデーモンのps出力からPIDを取得して、そのルールを追加する小さなスクリプトを作成することもできます。例として、Pid-owner.txtの例に示すようなルールを作成できます


これは、これを行うための最良の方法のために私のソリューションと結びついていると思います。--pid-ownerは実際にはプロセスに基づいて選択するのではなく、プロセスの所有者に基づいて選択します。プロセスを起動する特別なユーザーを作成し、その所有者に基づいてフィルタリングする必要があるので、特定のプロセスからトラフィックをシェーピングしていることを確認できます汎用ユーザー。
ウェズリー

@Wesleyそれはmanページが言うことではありません:「--pid-owner processidパケットが与えられたプロセスIDを持つプロセスによって作成された場合にマッチします。」linux.die.net/man/8/iptables
Ajedi32

この目的でiptablesとtcを使用する方法の例が含まれていれば、この答えははるかに優れています。与えられたiptables -A OUTPUT -m owner --pid-owner 78例は完全ではないようで(パケットにのみ一致するため、それらを「マーク」する方法を言わない)、tcまったく説明されていません。
Ajedi32

パケットをマークするには、のようなものを追加する必要があります-j MARK --set-mark 1。詳細については、wiki.archlinux.org
Mircea Vutcovici

40

私が発見した1つのオプションは、トリクルを使用することです。

トリクルは、ポータブルで軽量なユーザー空間帯域幅シェーパーです。協調モード(トリクルと共に)またはスタンドアロンモードで実行できます。

トリクルは、Unixローダーのプリロードを利用して機能します。基本的には、ソケットを介してデータを送受信するために必要な機能の新しいバージョンをアプリケーションに提供します。次に、ソケットを介したデータの送受信の遅延に基づいてトラフィックを制限します。トリクルは完全にユーザー空間で実行され、root権限を必要としません。


1
これが私の問題を解決したものです。クライアントがブロックチェーン全体をダウンロードする人であると判断したときに、ビットコインデーモンが私の帯域をすべてランダムに吸い込む問題が発生していました。
Omnifarious

trickleあなたは404にリードを与えたリンク
Geremia

壊れたリンクを修正しました(これをWayback Machineリンクに置き換えます)。
G-Manは「Reinstate Monica」と言います

3
トリクルは現在githubにあるようです:github.com/mariusae/trickle
チーター

またはsudo apt-get install trickle
ggll

22

パイプ(またはstdout)に書き込むことができる場合は、pv(パイプビューアー)コマンドをインストールできます。もともとは、パイプを介して転送されたデータの進行状況を表示するために作成されました。

tar cvf - /files/to/backup | pv -L 512k > /your/file/on/sshfs

   -L RATE, --rate-limit RATE
          Limit the transfer to a maximum of RATE  bytes  per  second.   A
          suffix of "k", "m", "g", or "t" can be added to denote kilobytes
          (*1024), megabytes, and so on.

これは実際に私が使用すると思う答えです!しかし、それは私が最初に尋ねた特定の質問に対する正確な答えではありません。悲しいかな、質問の種類は変化しましたが、それでもプロセスのネットワーク速度を制限することに焦点を合わせていました。ただし、私が尋ねたこの新しい質問に貢献することができます。unix.stackexchange.com
Wesley

ありがとう!私は同様のことをしていて、やってしまったssh my-remote-server bash -c "'find / -xdev|cpio -o|gzip -c1'"|pv --rate-limit 1M > my-remote-root.cpio.gz
クラック

1
ioniceと組み合わせることもできますが、その特定のサーバーでは許可されませんでした。ssh my-remote-server ionice -c3 bash -c "'find / -xdev|cpio -o|gzip -c1'"|pv --rate-limit 1M > my-remote-root.cpio.gz
クラック

6

同じ理由で、--bwlimit = KBPSオプションを指定してrsyncを使用しています。

私たちの1ギガビットイーサネットは、古いSCSI320 DAS RAIDを簡単に圧倒できます。本質的には、DOSのNFSストアに依存している古い本番用ボックスがあります。


4

どのようにデータを転送していますか?(rsh over ssh?scp?sftp?他のもの?)

rsyncを使用すると、帯域幅を制限できます(オプション--bwlimit = KBPSを参照)。rsync -e ssh --bwlimit ..

あるいは、qdiscまたは同等のものを設定して空想的なレート制限を行うこともできますが、あなたの場合、これは深刻な過剰な作業になると思われます。これに関するドキュメントはThe Linux Advanced Routing and Traffic Control HOWTOで入手できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.