返回顶部
首页 > 资讯 > 操作系统 >如何在Linux中使用Trickle限制应用程序带宽占用
  • 243
分享到

如何在Linux中使用Trickle限制应用程序带宽占用

2023-06-13 01:06:41 243人浏览 八月长安
摘要

这篇文章主要介绍“如何在linux中使用Trickle限制应用程序带宽占用”,在日常操作中,相信很多人在如何在Linux中使用Trickle限制应用程序带宽占用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如

这篇文章主要介绍“如何在linux中使用Trickle限制应用程序带宽占用”,在日常操作中,相信很多人在如何在Linux中使用Trickle限制应用程序带宽占用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何在Linux中使用Trickle限制应用程序带宽占用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

有没有遇到过系统中的某个应用程序独占了你所有的网络带宽的情形?如果你有过这样的遭遇,那么你就会感受到Trickle这种带宽调整应用的价值。不管你是一个系统管理员还只是普通Linux用户,都需要学习如何控制应用程序的上下行速度,来确保你的网络带宽不会被某个程序霸占。
什么是 Trickle?

Trickle是一个网络带宽调整工具,可以让我们管理应用程序的网络上下行速度,使得可以避免其中的某个应用程序霸占了全部或大部分可用的带宽。换句话说,Trickle可以让你基于单个应用程序来控制网络流量速率,而不是仅仅针对与单个用户——这是在客户端网络环境中经典的带宽调整情况。
Trickle 是如何工作的?

另外,trickle 可以帮助我们基于应用来定义优先级,所以当对整个系统进行了全局限制设定,高优先级的应用依然会自动地获取更多的带宽。为了实现这个目标,trickle 对 tcp 连接上的套接字的数据发送、接收设置流量限制。我们必须注意到,除了影响传输速率之外,在这个过程中,trickle任何时候都不会以任何方式来改变其中的数据。
Trickle不能做什么?

这么说吧,唯一的限制就是,trickle不支持静态链接的应用程序或者具有SUID或SGID位设置的二进制程序,因为它使用动态链接的方式将其载入到需要调整的进程和其关联的网络套接字之间。 Trickle此时会在这两种软件组件之间扮演代理的角色。

由于trickle并不需要超级用户的权限来运行,所以用户可以设置他们自己的流量限制。可能这并不是你想要的,我们会探索如何使用全局设定来限制系统中的所有用户的流量限制。也即是说,此时系统中的每个用户具有管理各自的流量速率,但是无论如何,都会受到系统管理员给他们设置的总体限制。

在这篇文章中,我们会描述如何通过trickle在linux平台上管理应用程序使用的网络带宽。为了生成所需的流量,在此会在客户端(Centos 7 server – dev1: 192.168.0.17)上使用 ncftpput 和 ncftpget, 在服务器(Debian Wheezy 7.5 – dev2: 192.168.0.15)上使用vsftpd 来进行演示。 相同的指令也可以在RedHat,Fedora和ubuntu等系统使用。
前提条件

    对于 RHEL/CentOS 7/6, 开启EPEL仓库。这些用于企业版 Linux 的额外软件包是一个由Fedora项目维护的高质量、开源的软件仓库,而且百分之百与其衍生产品相兼容,如企业版本Linux和CentOS。 在这个仓库中trickle和ncftp两者都是可用的。

    按照如下方式安装ncftp:

       

代码如下:

# yum update && sudo yum install ncftp      [基于 RedHat 的系统]
       # aptitude update && aptitude install ncftp [基于 Debian 的系统]

    在单独的服务器上设置一个FTP服务器。需要注意的是,尽管FTP天生就不安全,但是仍然被广泛应用在安全性无关紧要的文件上传下载中。 在这篇文章中我们使用它来演示trickle的优点,同时它也会在客户端的标准输出流中显示传输速率。我们将是否在其它时间使用它放在一边讨论。       

代码如下:

# yum update && yum install vsftpd      [基于 RedHat 的系统]
       # aptitude update && aptitude install vsftpd        [基于 Debian 的系统]

    现在,在FTP服务器上按照以下方式编辑 /etc/vsftpd/vsftpd.conf 文件。       

代码如下:

anonymous_enable=NO
       local_enable=YES
       chroot_local_user=YES
       allow_writeable_chroot=YES

    在此之后,确保在你的当前会话中启动了vsftpd,并在之后的启动中让其自动启动。       

代码如下:

# systemctl start vsftpd        [基于 systemd 的系统]
       # systemctl enable vsftpd
       # service vsftpd start          [基于 init 的系统]
       # chkconfig vsftpd on

    如果你选择在一个使用 ssh 密钥进行远程访问的 CentOS/RHEL 7中搭建FTP服务器,你需要一个密码受保护的用户账户,它能访问root目录之外的某个目录,并有能在其中上传和下载文件的权限。

    你可以通过在你的浏览器中输入以下的URL来浏览你的家目录。一个登录窗口会弹出来提示你输入FTP服务器中的有效的用户名和密码。

        ftp://192.168.0.15

    如果验证成功,你就会看到你的家目录中的内容。该教程的稍后部分中,你将可以刷新页面来显示在你之前上传过的文件。

如何在Linux中使用Trickle限制应用程序带宽占用
如何在Linux中安装 trickle

    通过yum或aptitude来安装trickle.

    为了确保能够成功安装,最好在安装工具之前,保证当前的安装包是最新的版本。       

代码如下:

# yum -y update && yum install trickle              [基于 RedHat 的系统]
       # aptitude -y update && aptitude install trickle        [基于 Debian 的系统]

    确认trickle是否对特定的二进制包有用。

    之前我们解释过,trickle只对使用动态或共享的库的二进制包有用。为了确认我们是否可以对某个特定的应用使用trickle,我们可以使用著名的ldd(列出动态依赖)工具。 特别地,我们会查看任何给定程序的动态依赖中其当前使用的glibc,因为其准确地定义了通过套接字通讯所使用的系统调用。

    对一个给定的二进制包执行以下命令来查看是否能对其使用trickle进行带宽调整:      

代码如下:

# ldd $(which [binary]) | grep libc.so

    例如,       

代码如下:

# ldd $(which ncftp) | grep libc.so

    其输出是:       

代码如下:

# libc.so.6 => /lib64/libc.so.6 (0x00007efff2e6c000)

    输出中的括号中的字符可能在不同的系统平台有所不同,甚至相同的命令在不同的时候运行也会不同,因为其代表包加载到物理内存中的地址。

    如果上面的命令没有返回任何的结果,就说明这个二进制包没有使用libc包,因此trickle对其不能起到带宽调整的作用。
学习如何使用Trickle

最基本的用法就是使用其独立模式,通过这种方式,trickle用来显式地定义给定应用程序的上传下载速率。如前所述,为了简单,我们会使用相同的应用来进行上传下载测试
在独立模式下运行trickle

我们会比较在有无trickle的情况下的上传下载速率, ‘-d’选项指示下载速率(KB/s单位),而'-u'选项指示相同单位的上传速率。另外我们会使用到‘-s’选项来指定trickle应该以独立模式运行。

以独立模式运行trickle的基本语法如下:   

代码如下:

# trickle -s -d [下载速率,KB/s] -u [上传速率,KB/s]

为了能够让你自己运行以下样例,确保你在自己的客户端安装了trickle和ncftp(我的是192.168.0.17)。

样例1:在有无trickle的情况下上传一个2.8 MB的pdf文件。

我们使用一个自由发布的LInux基础知识PDF文件来进行下面的测试。

你可以首先使用下面的命令将这个文件下载到你当前的工作目录中:  

代码如下:

# wget Http://linux-training.be/files/books/LinuxFun.pdf

下面是在没有trickle的情况下将一个文件上传到我们的FTP服务器的语法:   

代码如下:

# ncftpput -u username -p passWord 192.168.0.15  /remote_directory local-filename

其中的 /remote_directory 是相对于该用户的家目录的上传路径,而local-filename是一个你当前工作目录中的文件。

特别的是,在没有trickle的情形下,我们可以得到上传峰值速率52.02MB/s(请注意,这个不是真正的平均上传速率,而是峰值开始的瞬时值),而且这个文件几乎在瞬间就完成了上传。   

代码如下:

# ncftpput -u username -p password 192.168.0.15  /testdir LinuxFun.pdf

输出:   

代码如下:

LinuxFun.pdf:                                           2.79 MB   52.02 MB/s

在使用trickle的情况下,我们会限制上传速率在5KB/s。在第二次上传文件之前,我们需要在目标目录中删除这个文件,否则ncftp就会通知我们在目标目录中已经存在了与上传文件相同的文件,从而不会执行文件的传输:   

代码如下:

# rm /absolute/path/to/destination/directory/LinuxFun.pdf

然后:   

代码如下:

# trickle -s -u 5 ncftpput -u username -p password 111.111.111.111 /testdir LinuxFun.pdf

输出:   

代码如下:

LinuxFun.pdf:                                           2.79 MB 4.94 kB/s

在上面的样例中,我们看到平均的上传速率下降到了5KB/s。

样例2:在有无trickle的情况下下载相同的2.8MB的PDF文件

首先,记得从原来的源目录中删除这个PDF:  

代码如下:

# rm /absolute/path/to/source/directory/LinuxFun.pdf

请注意,下面的样例中将远程的文件下载到客户端机器的当前目录下,这是由FTP服务器的IP地址后面的“.”决定的。

没有trickle的情况下:   

代码如下:

# ncftpget -u username -p  password 111.111.111.111 . /testdir/LinuxFun.pdf

输出:   

代码如下:

LinuxFun.pdf:                                           2.79 MB  260.53 MB/s

在有trickle的情况下,限制下载速率在20KB/s: 

代码如下:

# trickle -s -d 30 ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf

输出:   

代码如下:

LinuxFun.pdf:                                           2.79 MB   17.76 kB/s

在监督[非托管]模式下运行Trickle

trickle也可以按照/etc/trickled.conf文件中定义的一系列参数运行在非托管模式下。 这个文件定义了守护线程 trickled的行为以及如何管理trickle。

另外,如果你想要全局设置被所有的应用程序使用的话,我们就会需要使用trickle命令。 这个命令运行守护进程,并允许我们通过trickle定义所有应用程序共享的上传下载限制,不需要我们每次来进行指定。

例如,运行:  

代码如下:

# trickled -d 50 -u 10

会导致任何通过trickle运行的应用程序的上传下载速率分别限制在30kb/s和10kb/s。

请注意,你可以在任何时间都能确认守护线程trickled是否正在运行以及其运行参数:   

代码如下:

# ps -ef | grep trickled | grep -v grep

输出:   

代码如下:

root    16475   1  0 Dec24 ?        00:00:04 trickled -d 50 -u 10

样例3:在使用/不使用trickle的情形下上传一个 19MB 的mp4文件到我们的FTP服务器。

在这个样例中,我们会使用“He is the gift”的自由分发视频,可以通过这个链接下载。

我们将会在开始时通过以下的命令将这个文件下载到你的当前工作目录中:   

代码如下:

# wget http://media2.ldscdn.org/assets/missionary/our-people-2014/2014-00-1460-he-is-the-gift-360p-eng.mp4

首先,我们会使用之前列出的命令来开启守护进程trickled:   

代码如下:

# trickled -d 30 -u 10

在不使用trickle时:

  

代码如下:

# ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4

输出:   

代码如下:

2014-00-1460-he-is-the-gift-360p-eng.mp4:               18.53 MB   36.31 MB/s

在使用trickle时:   

代码如下:

# trickle ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4

输出:   

代码如下:

2014-00-1460-he-is-the-gift-360p-eng.mp4:               18.53 MB    9.51 kB/s

我们可以看到上面的输出,上传的速率下降到了约 10KB/s。

** 样例4:在使用/不使用trickle的情形下下载这个相同的视频 **

与样例2一样,我们会将该文件下载到当前工作目录中。

在没有trickle时:

   

代码如下:

# ncftpget -u username -p password 192.168.0.15 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4

输出:   

代码如下:

2014-00-1460-he-is-the-gift-360p-eng.mp4:               18.53 MB  108.34 MB/s

有trickle的时:   

代码如下:

# trickle ncftpget -u username -p password 111.111.111.111 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4

输出:   

代码如下:

2014-00-1460-he-is-the-gift-360p-eng.mp4:               18.53 MB   29.28 kB/s

上面的结果与我们之前设置的下载限速相对应(30KB/s)。

注意: 一旦守护进程开启之后,就没有必要使用trickle来为每个应用程序来单独设置限制。

如前所述,人们可以进一步地通过trickled.conf来客制化trickle的带宽速率调整,该文件的一个典型的分段有以下部分组成:  

代码如下:

[service]
   Priority = <value>
   Time-Smoothing = <value>
   Length-Smoothing = <value>

其中,

  •     [service] 用来指示我们想要对其进行带宽使用调整的应用程序名称
        Priority 用来让我们为某个服务制定一个相对于其他服务高的优先级,这样就不允许守护进程管理中的一个单独的应用程序来占用所有的带宽。越小的数字代表更高的优先级。
        Time-Smoothing [以秒计]: 定义了trickled让各个应用程序传输或接收数据的时间间隔。小的间隔值(0.1-1秒)对于交互式应用程序是理想的,因为这样会具有一个更加平滑的会话体验,而一个相对较大的时间间隔值(1-10秒)对于需要批量传输应用程序就会显得更好。如果没有指定该值,默认是5秒。
        Length-smoothing [KB 单位]: 该想法与Time-Smoothing如出一辙,但是是基于I/O操作而言。如果没有指定值,会使用默认的10KB。

上述平滑值(Time-Smoothing、 Length-smoothing)的改变会被翻译为将指定的服务的使用一个间隔值而不是一个固定值。不幸的是,没有一个特定的公式来计算间隔值的上下限,主要依赖于特定的应用场景。

下面是一个在CentOS 7 客户端中的trickled.conf 样例文件(192.168.0.17):   

代码如下:

[ssh]
   Priority = 1
   Time-Smoothing = 0.1
   Length-Smoothing = 2
   [ftp]
   Priority = 2
   Time-Smoothing = 1
   Length-Smoothing = 3

使用该设置,trickled会为SSH赋予比FTP较高的传输优先级。值得注意的是,一个交互进程,例如SSH,使用了一个较小的时间间隔值,然而一个处理批量数据传输的服务如FTP,则使用一个较大的时间间隔来控制之前的样例中的上传下载速率,尽管不是百分百的由trickled指定的值,但是也已经非常接近了。

到此,关于“如何在Linux中使用Trickle限制应用程序带宽占用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 如何在Linux中使用Trickle限制应用程序带宽占用

本文链接: https://lsjlt.com/news/264059.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何在Linux中使用Trickle限制应用程序带宽占用
    这篇文章主要介绍“如何在Linux中使用Trickle限制应用程序带宽占用”,在日常操作中,相信很多人在如何在Linux中使用Trickle限制应用程序带宽占用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如...
    99+
    2023-06-13
  • 如何在Linux系统中使用限制网络带宽
    本篇内容主要讲解“如何在Linux系统中使用限制网络带宽”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何在Linux系统中使用限制网络带宽”吧!在 Linux 中限制一个应用的速率限制网络流量...
    99+
    2023-06-13
  • Linux安装和使用Trickle以便更好的进行宽带控制的方法
    这篇文章主要讲解了“Linux安装和使用Trickle以便更好的进行宽带控制的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux安装和使用Trickle以便更好的进行宽带控制的方法...
    99+
    2023-06-13
  • 美国vps租用如何限制带宽
    美国vps租用限制带宽的方法:1、如果是全局限制WWW服务带宽,在IIS管理器的最大带宽框中,输入目录中每个站点要使用的最大千字节/秒的数值,并在连接限制为选项中,输入Web或FTP服务上允许同时连接的最大数量;2、如果是限制单个网站使用的...
    99+
    2024-04-02
  • 国外vps租用如何限制带宽
    国外vps租用限制带宽的方法:1、如果是全局限制WWW服务带宽,在IIS管理器的最大带宽框中,输入目录中每个站点要使用的最大千字节/秒的数值,并在连接限制为选项中,输入Web或FTP服务上允许同时连接的最大数量;2、如果是限制单个网站使用的...
    99+
    2024-04-02
  • 在 Linux 中如何限制Python程序所能使用的最大内存
    这篇文章主要讲解了“在 Linux 中如何限制Python程序所能使用的最大内存”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在 Linux 中如何限制Py...
    99+
    2024-04-02
  • 在Linux系统中怎么限制CPU占用率
    这篇文章主要讲解了“在Linux系统中怎么限制CPU占用率”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在Linux系统中怎么限制CPU占用率”吧!Linux内核是一名了不起的马戏表演者,它...
    99+
    2023-06-13
  • 如何在PHP中使用HTTP响应来控制Windows应用程序?
    PHP是一种广泛使用的开源服务器端脚本语言,它可以与Windows应用程序进行交互。HTTP响应是一种常用的通信协议,可以用于控制Windows应用程序。在本文中,我们将探讨如何在PHP中使用HTTP响应来控制Windows应用程序。 一、...
    99+
    2023-07-07
    http windows 响应
  • PHP应用程序如何在Linux容器中使用存储?
    随着云计算技术的发展,容器技术成为了云计算领域的一个热点。容器技术可以让开发者更加方便地打包和部署应用程序,并且在不同的云平台上进行迁移。Linux容器技术是目前最为流行的容器技术之一,它可以提供快速、可靠和高效的应用程序部署方式。但是,...
    99+
    2023-07-09
    linux 容器 存储
  • 如何在ASP.NET应用程序中使用npm?
    ASP.NET是一种流行的Web应用程序框架,它使用.NET Framework和C#编程语言。随着Web开发的发展,前端技术也逐渐成为Web应用程序开发的重要组成部分。npm是Node.js的包管理器,它为前端开发人员提供了大量的Java...
    99+
    2023-09-28
    git npm django
  • Linux中如何使用cgroups限制cpu
    这篇文章主要讲解了“Linux中如何使用cgroups限制cpu”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux中如何使用cgroups限制cpu”吧!cgroups 里,可以用 c...
    99+
    2023-06-13
  • 如何在ASP.Net Core应用程序中使用Bootstrap4
    本篇内容介绍了“如何在ASP.Net Core应用程序中使用Bootstrap4”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!笔者...
    99+
    2023-06-26
  • 如何在 Linux 上使用 ASP 构建 Web 应用程序?
    在 Linux 上使用 ASP 构建 Web 应用程序是一项非常实用的技能,它能够帮助开发者快速构建高效的 Web 应用程序。下面我们将详细介绍如何在 Linux 上使用 ASP 构建 Web 应用程序。 一、准备工作 在开始之前,我们需要...
    99+
    2023-06-21
    npm javascript linux
  • 如何在 Linux 上使用 npm 管理 JavaScript 应用程序?
    在今天的软件开发中,JavaScript已经成为了一种不可或缺的编程语言。而npm是一个非常流行的JavaScript包管理器,它是Node.js的默认包管理器,可以用于管理JavaScript应用程序的依赖项。在这篇文章中,我们将介绍如何...
    99+
    2023-06-21
    npm javascript linux
  • 如何在 Linux 上使用 Python 编写 Django 应用程序?
    在本文中,我们将探讨如何在 Linux 上使用 Python 编写 Django 应用程序。Django 是一个流行的Python Web框架,它提供了一个强大的基础架构,使得开发Web应用程序变得更加容易和快速。它具有高度的可扩展性,安全...
    99+
    2023-07-19
    编程算法 linux django
  • 如何在Go应用程序中使用NPM缓存?
    当我们在编写使用 Node.js 的 Go 应用程序时,经常会用到 NPM 包管理器来安装、更新和管理依赖项。但是,在使用 NPM 过程中,我们可能会遇到一些问题,例如网络连接较慢、依赖项版本更新导致构建失败等等。为了解决这些问题,我们可以...
    99+
    2023-10-07
    npm 缓存 load
  • 如何在 ASP 应用程序中使用 HTTP 容器?
    ASP(Active Server Pages)是一种用于创建动态网页的技术,它可以让开发人员使用 VBScript 或 JScript 等脚本语言来编写动态网页。而 HTTP 容器则是一种用于处理 HTTP 请求的软件,它可以让 ASP ...
    99+
    2023-06-03
    日志 http 容器
  • 如何在Linux上使用NPM来打包ASP应用程序?
    在Linux上使用NPM来打包ASP应用程序是一项非常重要的任务,特别是对于那些需要将自己的应用程序部署到生产环境的开发者来说。在本文中,我们将介绍如何使用NPM来打包ASP应用程序,并提供一些示例代码来帮助您更好地理解该过程。 首先,让我...
    99+
    2023-06-25
    linux npm 打包
  • 如何在 Linux 中使用 go-path 存储来管理 go 应用程序?
    Go 是一种非常流行的编程语言,因为它的速度和效率非常高。许多开发者在 Linux 系统上使用 Go 来编写应用程序。在 Linux 上,我们可以使用 go-path 存储来管理 Go 应用程序。本文将介绍如何在 Linux 中使用 go...
    99+
    2023-07-22
    linux path 存储
  • 怎么在linux中使用taskset命令限制进程
    这期内容当中小编将会给大家带来有关怎么在linux中使用taskset命令限制进程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。      taskset就可以帮我...
    99+
    2023-06-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作