заметки на полях

Блокнот разработчика

Ограничение канала для отдельных приложений

В один прекрасный момент может сложиться ситуация когда приложение непростительно отжирает весь канал, когда хотелось бы ограничить его небольшими ресурсами. У меня возникла такая проблема когда скрипт резервного копирования начинал перекладывать архивы с бэкапами на FTP. Т. к. FTP для бэкапов является локальным ресурсом и скорость подключения к нему большая, то и получалось что скрипт отжирал весь канал, в результате чего в логах на время копирования вываливались ошибки от nginx

8557#0: *8936853 upstream timed out (110: Connection timed out) while reading response header from upstream

а HostTracker начинал слать уведомления об ошибке доступа к ресурсу.

Решением явилось использование утилиты trickle

$ sudo apt-get install trickle

Можно использовать как демон (trickled), а можно независимо для приложений. Самые нужные в данный момент ключи, это trickle -d 512 -u 512 ... устанавливающие в данном случае скорость в 512 килобайт в секунду для входящего и исходящего трафика соответственно.

В результате вышеупомянутый скрипт резервного копирования поменялся только в одной строчке с

ftp -n $FTPHOST <<EOF

на

trickle -d 512 -u 512 ftp -n $FTPHOST <<EOF

Вот собственно первое что нагуглил по теме когда искал решение: Ограничение сетевого трафика для приложений и от этого уже пошел +

$ man trickle

Tags: ,

Leave a Reply