已开启 發表於 2023-3-11 21:53:00

Linux服务器限制网络带宽流量速率(限制应用程序和指定网卡的流量)

<p class="p">在本文中,我将为你分享两种&nbsp;Linux&nbsp;服务器限制网络流量速率的方法,希望可以帮助到你~</p>
<p class="p">一、<strong>限制应用程序的网络流量速率</strong></p>
<p class="p">限制应用程序的网络流量速率的方法就是trickle工具。</p>
<p class="p"><strong>1、trickle介绍</strong></p>
<p class="p">Trickle是一款轻量级的用户空间带宽控制管理工具,用来限制如浏览器Firefox等,FTP,SSH,curl,wget,scp等等使用网络带宽。</p>
<p class="p">Trickle通过控制socket数据读写量来控制和限制应用的上传和下载速度。要注意的是trickle使用动态链接和加载,所以只对于使用libc.so库的程序有用,其他的则无效。由于trickle可以设置数据在socket上的传输延迟,因此就可以用来限制应用程序的网络带宽。</p>
<p class="p">Trickle不能用于限制使用UDP协议的应用的带宽,只可用于TCP连接。也无法工作在使用静态链接的可执行程序上。</p>
<p class="p">即便如此,trickle 命令有一个很好的特性是它仅在用户空间中运行,这意味着你不需要 root 权限就可以限制一个程序的带宽使用。</p>
<p class="p">&nbsp;</p>
<p class="p">2、<strong>如何判断trickle对应用程序是否有效?</strong></p>
<p class="p">根据是否使用libc.so库来判断</p>
<p class="p">可以通过ldd命令来查看这个程序是否使用了libc.so库。如果应用程序使用了这个库,就可以用trickle来限制网络带宽,否则就不行。</p>
<div class="cnblogs_code">
<pre># ldd /usr/bin/wget | grep libc.so
libc.so.6 =&gt; /lib64/libc.so.6 (0x00002adc30397000) </pre>
</div>
<p>&nbsp;</p>
<p class="p">3、<strong>Linux安装Trickle</strong></p>
<p class="p">Trickle工具有一些依赖包,安装和使用trickle之前必须安装“libevent库”,不过这个库在大多数现在的linux服务器上已经默认安装了。</p>
<p class="p">在&nbsp;Ubuntu/Debian/Linux Mint服务器上运行 apt-get install trickle进行安装。请确保源列表已经更新,接着安装你想要的应用。&nbsp;</p>
<div class="cnblogs_code">
<pre>$ sudo apt-get update
$ sudo apt-get install trickle</pre>
</div>
<p>&nbsp;</p>
<p class="p">在&nbsp;Fedora/&nbsp;CentOS/RHEL服务器上需要更新系统,然后使用下面的命令安装trickle</p>
<div class="cnblogs_code">
<pre># yum update
# yum install trickle</pre>
</div>
<p>&nbsp;</p>
<p class="p">4、<strong>trickle基本使用方法。</strong></p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre># trickle --help
Usage: trickle [-hvVs] [-d &lt;rate&gt;] [-u &lt;rate&gt;] [-w &lt;length&gt;] [-t &lt;seconds&gt;]
[-l &lt;length&gt;] [-n &lt;path&gt;] command ...
-h Help (this)
-v Increase verbosity level
-V Print trickle version
-s 在独立模式下独立运行
-d &lt;rate&gt; 设置最大累计下载速率为 &lt;rate&gt; KB/s
-u &lt;rate&gt; 设置最大累计上传速度为 &lt;rate&gt; KB/s
-w &lt;length&gt; 设置窗口长度为 &lt;length&gt; KB 。默认512KB。
-t &lt;seconds&gt; 设置默认的平滑时间 &lt;seconds&gt; s 。平滑时间决定多少时间间隔trickle将尝试让应用程序传输数据。较小的值(0.1 - 1秒)会导致更连续(平滑)会话,非常适合于交互式应用。而较大的值(1 - 10秒)可能会产生一阵阵的发送和接收数据,对需要大量带宽的应用程序更好。
-l &lt;length&gt; 设置默认的平滑长度 &lt;length&gt; KB 。 默认10 KB。
-n &lt;path&gt; 指定trickled socket名称 &lt;path&gt; 。 默认/tmp/.trickled.sock 。
-L &lt;ms&gt; 设置延时。</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>&nbsp;</p>
<p class="p">只需简单地把&nbsp;trickle 命令(及速率参数)放在你想运行的命令之前。</p>
<div class="cnblogs_code">
<pre>$ trickle -d -u 这就可以将下载和上传速率限定为特定值(单位 KBytes/s)。</pre>
</div>
<p>&nbsp;</p>
<p class="p">例如,将你的&nbsp;scp 会话的最大上传带宽设定为 100 KB/s</p>
<div class="cnblogs_code">
<pre>$ trickle -u 100 scp backup.tgz alice@192.168.4.93:/home/wslu</pre>
</div>
<p>&nbsp;</p>
<p class="p">如若你想,你可以通过创建一个自定义启动器的方式,使用下面的命令为你的&nbsp;Firefox 浏览器设定最大下载速率(例如, 300 KB/s)。</p>
<div class="cnblogs_code">
<pre>trickle -d 300 firefox %u</pre>
</div>
<p>&nbsp;</p>
<p class="p"><strong>二、限制网络接口的网络流量速率</strong></p>
<p class="p">Linux 服务器限制网络接口的流量速率需要用到一个工具:WonderShaper。</p>
<p class="p"><strong>1、wondershaper介绍</strong></p>
<p class="p">Wondershaper实际上是一个shell脚本,它使用tc来定义流量调整命令,使用QoS来处理特定的网络接口。外发流量通过放在不同优先级的队列中,达到限制传出流量速率的目的;而传入流量通过丢包的方式来达到速率限制的目的。</p>
<p class="p">事实上,&nbsp;wondershaper 的既定目标不仅仅是对一个接口增加其带宽上限;当批量下载或上传正在进行时,wondershaper 还试图去保持互动性会话如 SSH 的低延迟。同样的,它还会控制批量上传(例如 Dropbox 的同步)不会使得下载“窒息”,反之亦然。</p>
<p class="p">2、<strong>Linux安装Wonder Shaper</strong></p>
<p class="p"><strong>1)安装依赖</strong></p>
<p class="p"><strong>Debian/Ubuntu系统</strong></p>
<div class="cnblogs_code">
<pre>sudo apt-get update

sudo apt install -y wondersharper</pre>
</div>
<p>&nbsp;</p>
<p class="p"><strong>C</strong><strong>entos系统</strong></p>
<div class="cnblogs_code">
<pre>yum install epel-release -y

sudo yum install -y wondersharper</pre>
</div>
<p>&nbsp;</p>
<p class="p">使用二进制</p>
<p class="p">2)下载wondershaper</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre>git clone https://github.com/magnific0/wondershaper.git

cd wondershaper

#直接运行wondershaper

./wondershaper </pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>&nbsp;</p>
<p class="p">3)全局安装wondershaper</p>
<div class="cnblogs_code">
<pre>cd wondershaper

sudo make install</pre>
</div>
<p>&nbsp;</p>
<p class="p">3、<strong>wondershaper 基本</strong><strong>用法</strong></p>
<p class="p"><strong>首先找到网络接口的名称。以下是查找网卡详细信息的几个常用方法。</strong></p>
<div class="cnblogs_code">
<pre>$ ip addr

$ route

$ ifconfig </pre>
</div>
<p><strong>&nbsp;</strong></p>
<p class="p"><strong>一旦找到了网卡名称,就可以限制带宽速率了,如下所示。</strong></p>
<div class="cnblogs_code">
<pre>$ sudo wondershaper -a &lt;adapter&gt; -d &lt;rate&gt; -u &lt;rate&gt; </pre>
</div>
<p>&nbsp;</p>
<p class="p">比如说你的网卡名是enp0s8,你希望将下载和上传的带宽限制分别限制于1024 Kbps和512 kbps,命令应该是:</p>
<div class="cnblogs_code">
<pre>$ sudo wondershaper -a enp0s8 -d 1024 -u 512 </pre>
</div>
<p>&nbsp;</p>
<p class="p">其中</p>
<p class="p">-a:网卡名</p>
<p class="p">-d:下载速率</p>
<p class="p">-u:上传速度</p>
<p class="p">&nbsp;</p>
<p class="p">想取消网络适配器的速度限制,只要运行:</p>
<div class="cnblogs_code">
<pre>$ sudo wondershaper -c -a enp0s8 </pre>
</div>
<p>&nbsp;</p>
<p class="p">或者</p>
<div class="cnblogs_code">
<pre>$ sudo wondershaper -c enp0s8 </pre>
</div>
<p>&nbsp;</p>
<p class="p">想了解更多详细信息,请运行以下命令,查看帮助部分:</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre>$ wondershaper -h

USAGE: ./wondershaper [-hcs] [-a &lt;adapter&gt;] [-d &lt;rate&gt;] [-u &lt;rate&gt;]

Limit the bandwidth of an adapter

OPTIONS:

-h Show this message                                 //显示帮助信息

-a &lt;adapter&gt; Set the adapter                         //指定网卡接口,通过ifconifg或者ip show addr查看:比如eth0

-d &lt;rate&gt; Set maximum download rate (in Kbps) and/or //限制下载的速度

-u &lt;rate&gt; Set maximum upload rate (in Kbps)          //限制上传的速度

-p Use presets in "/etc/systemd/wondershaper.conf"

-c Clear the limits from adapter                     //清除对应网卡接口的规则

-s Show the current status of adapter                //显示当前网卡状态

-v Show the current version                        //显示版本信息

Configure HIPRIODST in "/etc/systemd/wondershaper.conf" for hosts

requiring high priority i.e. in case ssh uses dport 443.

MODES:

wondershaper -a &lt;adapter&gt; -d &lt;rate&gt; -u &lt;rate&gt;

wondershaper -c -a &lt;adapter&gt;

wondershaper -s -a &lt;adapter&gt;

EXAMPLES: //针对以上示例给出的example

wondershaper -a eth0 -d 1024 -u 512    //限制eth0上行速度512kbps,下行速度1024kbps

wondershaper -a eth0 -u 512            //仅限制eth0上行速度512kbps

wondershaper -c -a eth0                //清除为eth0设定的wondershaper的相关规则</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>&nbsp;</p>
<p class="p">&nbsp;</p>
<p class="p">或者查阅参考手册页。</p>
<div class="cnblogs_code">
<pre>$ man wondershaper </pre>
</div>
<p>&nbsp;</p>
<p class="p"><strong>总结</strong></p>
<p class="p">在本文中,我分享了两种不同的方法,来达到Linux&nbsp;服务器限制应用程序和网络接口的带宽流量速率的目的。&nbsp;两种工具的使用都很简单,都为用户提供了一个快速且容易的方式来调整或限制流量。</p><br><br>
来源:https://www.cnblogs.com/A121/p/17207108.html
頁: [1]
查看完整版本: Linux服务器限制网络带宽流量速率(限制应用程序和指定网卡的流量)