すでに起動されているプロセスのネットワークスループットを制限しますか?(Linux / FreeBSD)


10

起動後にプロセスのネットワークスループットを制限するユーティリティはありますか?簡単な例:ユーザーがscpを使用してすべてのアップロード帯域幅を取得し、レートを制限したり、転送の優先度を下げたりしたいとします。

私はそれを達成するためにiptables / tcまたはpfの組み合わせを使用できると思いますが、「--pidオプションを指定したトリクルのような^^) "ワンショット"ツールが利用できるかどうか疑問に思っていましたか?


「トリクル」という意味ですか?
2010

編集:私は「トリクル」が意図されていたと思いました。
スティーブン月曜日

回答:


3

残念ながら、FreeBSDにはそのような解決策はありません。異なるパターンに基づいてネットワークの使用を制限するために使用されるダミーネット/ ipfwやaltq / pfのような多くのソリューションがありますが、pidではありません。

Linuxでは、ユーザーごとにネットワークの使用を制限する方法があります。

iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner test -j MARK --set-mark 1

pidに基づいてネットワーク使用率を制限する解決策はないと思います。


2
FreeBSDのipfwは、uidによってトラフィックを照合することもできます
gelraen

1

procが使用しているネットワークポートを取得するプロセスのlsof。使用されているポートがわかったら、IPTABLESルールを使用してこれらのポートをレート制限できます。これらの記事はあなたにもっと良いアイデアを与えるでしょう http: //linux-ip.net/articles/Traffic-Control-HOWTO/ http://blog.edseek.com/~jasonb/articles/traffic_shaping/ http:// wikis。 sun.com/pages/viewpage.action?pageId=49906332


0

「--pid-所有者」オプションは、「所有者」のiptablesモジュールから放棄された以降のLinuxでは、iptablesのとTCのも、組み合わせは(表の下の注を参照してください、ハード問題になる可能性がここに)。実際、この関連付け(パケットとプロセス)だけが複雑に見えますが、残りの部分は簡単に実行できます。つまり、パケットを非常に効率的にフィルタリングおよび制限できます。


0

これには既成の解決策はないと思います。しかし、標準のLinuxツールを使用すると、スクリプトをハッキングして、処理を実行できます。

まず、lsofを使用して、特定のプロセスのすべての接続のリストを取得できます。次に、それらの接続に対してtcを使用して入力ポリシーを作成できます。


0

おおまかに言って、プロセスを+20まで下げると、システムで実行されている他のものが優先され、ジョブのスケジュールが減るので、バッファーを埋めたり、パケットを処理したりするのが難しくなり、TCPにつながるはずです。スロットル。それは散発的ですが、十分に役立つかもしれません。

# renice 20 -p $pid

1
これは、帯域幅を制御しようとする非常に遠回りの方法であり、システムが非常に負荷が高い場合にのみ実際に機能します-アイドル状態のシステムでは、-20に再割り当てされたプロセスは、CPUに必要なだけ頻繁にアクセスします。
voretaq7

そうですが、これが他のローカルコンピュータと共有されている帯域幅ではない場合、マシンがアイドル状態であれば、このプロセスがすべての帯域幅を取得してもかまいません。重要なのは、帯域幅を使用しようとする別のプロセスがある場合のみです。「非常に高い負荷」の定義が異なる場合があります。実行しようとしている別のプロセスがある場合は、そのプロセスが優先されるため、負荷平均がコアあたり1以上の場合、これが役立ちます。私はそれが粗雑であることに注意しました、しかしそれが唯一の利用可能なツール(FreeBSD)であるなら、それは少なくとも一撃の価値があります。
Phil P
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.