Есть ли какая-нибудь утилита для ограничения сетевой пропускной способности процесса после его запуска? Простой пример: вы замечаете, что пользователь использует всю вашу пропускную способность для загрузки с помощью scp, и вы хотите ограничить скорость или уменьшить приоритет передачи.
Думаю, для этого я мог бы использовать комбинацию iptables / tc или pf, но мне было интересно, доступен ли инструмент «одноразовый» (например, струйка с опцией --pid ^^)?
К сожалению, для FreeBSD такого решения нет. Существует множество решений, таких как dummynet / ipfw или altq / pf, которые используются для ограничения использования сети на основе различных шаблонов, но не на основе pid.
В Linux есть способ ограничить использование сети в зависимости от пользователя:
iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner test -j MARK --set-mark 1
Я думаю, что нет решения ограничить использование сети на основе pid.
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
Грубо говоря, если вы доведете процесс до +20, тогда все, что запущено в системе, получит приоритет, и задание будет планироваться реже, поэтому будет сложнее заполнить буферы или обработать пакеты, что должно привести к некоторому TCP дросселирование. Это будет спорадически, но может помочь.
# renice 20 -p $pid
Я не думаю, что для этого есть готовое решение. Но, используя стандартные инструменты Linux, вы можете взломать сценарий, который сделает это.
Во-первых, вы можете получить список всех подключений определенного процесса с помощью lsof. Затем вы можете создать политики входа с tc для этих подключений.
В Linux даже комбинация iptables и tc может быть сложной проблемой, поскольку параметр "--pid-owner" был исключен из модуля iptables "owner" (см. Примечание под таблицей Вот). На самом деле, только эта ассоциация (пакет - процесс) кажется сложной, а все остальное мы можем легко сделать, то есть достаточно эффективно фильтровать и ограничивать пакеты.