Limiter le débit réseau d'un processus déjà lancé? (Linux / FreeBSD)

10

Existe-t-il un utilitaire pour limiter le débit réseau d'un processus après son lancement? Exemple simple: vous notez qu'un utilisateur utilise toute votre bande passante de téléchargement en utilisant scp et vous souhaitez limiter le débit ou diminuer la priorité du transfert.

Je suppose que je pourrais utiliser une combinaison de iptables / tc ou pf pour y parvenir, mais je me demandais s'il y avait un outil "one-shot" disponible (comme un filet avec une option --pid ^^)?

jbdenis
la source
Voulez-vous dire "filet"?
halp
Edit: j'ai supposé que "filet" était prévu.
Steven lundi

Réponses:

3

Malheureusement, il n'y a pas une telle solution pour FreeBSD. Il existe de nombreuses solutions comme dummynet / ipfw ou altq / pf qui sont utilisées pour limiter l'utilisation du réseau en fonction de modèles différents mais pas sur pids.

Sous Linux, il existe un moyen de limiter l'utilisation du réseau sur une base utilisateur:

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

Je pense qu'il n'y a pas de solution pour limiter l'utilisation du réseau basée sur pid.

Istvan
la source
2
L'ipfw de FreeBSD peut également correspondre au trafic par
UID
0

Sous Linux, même la combinaison d'iptables et de tc pourrait être un problème difficile, car l'option "--pid-owner" a été abandonnée du module "owner" iptables (voir la note ci-dessous le tableau ici ). En fait, seule cette association (paquet - processus) semble être compliquée, alors que nous pouvons facilement faire le reste, c'est-à-dire filtrer et limiter les paquets assez efficacement.

pitr
la source
0

Je ne pense pas qu'il existe une solution toute faite pour cela. Mais, en utilisant des outils Linux standard, vous pouvez pirater un script qui fera l'affaire.

Tout d'abord, vous pouvez obtenir une liste de toutes les connexions de processus spécifiques avec lsof. Ensuite, vous pouvez créer des stratégies d'entrée avec tc pour ces connexions.

thor
la source
0

En gros, si vous adaptez le processus à +20, alors tout ce qui s'exécute sur le système aura la priorité et le travail sera planifié moins souvent, il sera donc plus difficile de remplir les tampons ou les paquets de processus, ce qui devrait conduire à certains TCP étranglement. Ce sera sporadique, mais cela pourrait suffire.

# renice 20 -p $pid
Phil P
la source
1
C'est une façon très détournée d'essayer de contrôler la bande passante et ne fonctionnera vraiment que si le système est très chargé - Sur un système inactif, un processus redimensionné à -20 restera sur le CPU aussi souvent qu'il le souhaite.
voretaq7
D'accord, mais si ce n'est pas de la bande passante partagée avec d'autres ordinateurs locaux, alors si la machine est inactive, vous ne vous souciez surtout pas si ce processus obtient toute la bande passante. Ce n'est que lorsqu'un autre processus essaie d'utiliser la bande passante qu'il est important. Nous pouvons avoir différentes définitions de «très lourdement chargé» - s'il y a un autre processus qui essaie de s'exécuter, il obtient la priorité et donc si la moyenne de charge est> = 1 par cœur, cela peut aider. J'ai noté que c'était brut mais si c'est le seul outil disponible (FreeBSD) alors ça vaut au moins le coup.
Phil P