プロセスで使用する帯域幅を制限する方法は?

プロセスで使用する帯域幅を制限する方法は?

毎晩ファイルをバックアップするCentOS 5.7サーバーがあります。バックアップがネットワーク経由で送信されている間に、サーバーでホストされているさまざまなサイトを訪問する訪問者のパフォーマンスが低下する可能性があります。

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

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


いくつかの背景

たぶんどんな文脈が理解できるかもしれません。一歩下がって私が経験した問題は、バックアップ自体を作成するのに十分なローカルスペースがないということでした。 SSHFSを入力してください!バックアップは表面上ではローカルドライブに保存されるため、Webサーバー自体にはバックアップビットはありません。

これはなぜ重要ですか?なぜなら、これは聖下の使用を無効にするように見えるからですrsync --bwlimitrsync実際に転送が行われておらず、できるバックアップファイルを保存するスペースすら用意できないからです。

「ちょっと待って、なぜバックアップファイルを作るのですか?rsync「Plesk」という迷惑が混ざっているからです!これは、便宜上、Pleskを使用する顧客向けWebホストです。したがって、Plesk は回復プロセス中に使用するのに非常に安全なすべての種類の追加の魔法をバックアップに追加するため、Plesk を使用してバックアップを開始します。

悲しい顔

答え1

今見つけたオプションの1つはtrickle

trickleポータブル軽量ユーザースペース帯域幅シェーパー。コラボレーションモード(有効)またはスタンドアロンモードで実行できますtrickled

trickleUnixローダーのプリロードを活用して機能します。デフォルトでは、これはソケットを介してデータを送受信するために必要な新しいバージョンの機能をアプリケーションに提供します。その後、ソケットを介したデータの送受信を遅らせてトラフィックを制限します。trickle完全にユーザー空間で実行され、root権限は必要ありません。

Ubuntuユーザーの場合は、以下を実行してインストールします。

sudo apt install trickle

たとえば、ランタイムはmaven buildダウンロード速度を20kB / sに、アップロード速度を111kB / sに制限します。

trickle -sd 20 -u 111 mvn build

答え2

iptablesトラフィックを形成するために使用できるパケット(--pid-owner ...)を表示するために使用できますtc。さらに、「--sid-owner」は、このプロセスを含むスレッドおよびサブプロセスと共に使用できます。

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

マッチ --pid-所有者
コア2.3、2.4、2.5、2.6
はい iptables -A 出力 -m 所有者 --pid-owner78
説明する この一致は、パケットを担当するプロセスID(PID)に基づいてパケットを一致させるために使用されます。このマッチングは少し難しいですが、1つの例は、PID 94のみがHTTPポートからパケットを送信できるようにすることです(もちろん、HTTPプロセスがスレッド化されていない場合)。あるいは、特定のデーモンのps出力からPIDを取得し、それにルールを追加する小さなスクリプトを書くこともできます。たとえば、Pid-owner.txtの例に示されているルールを持つことができます。

答え3

パイプ(または標準出力)に書き込めば、pv(pipeviewer)コマンドをインストールできます。もともとは、パイプを介して送信されるデータの進行状況を表示するために作成されました。

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.

答え4

データをどのように転送しますか? (sshを介したrsync?scp?sftp?他のもの?)

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

あるいは、クールな速度制限を実行するためにqdiscまたはそれに対応するデバイスを設定することができますが、あなたの場合はそれが過度すぎると思います。これに関するドキュメントは以下にあります。Linux高度なルーティングとトラフィック制御方法

関連情報