2025年TRICKLE轻量级的用户空间带宽控制管理工具

TRICKLE轻量级的用户空间带宽控制管理工具TRICKLE trickle 是一款轻量级的用户空间带宽 控制管理的工具 用来限制如浏览器 Firefox 等 FTP SSH curl wget scp 等等使用网络带宽 trickle 通过控制 socket 数据读写量来控制和限制应用的上传和下载速度 它使用另一个版本的 BSD 套接字 API

大家好,我是讯享网,很高兴认识大家。

TRICKLE

trickle是一款轻量级的用户空间带宽控制管理的工具,用来限制如浏览器Firefox等, FTP , SSH,curl,wget,scp等等使用网络带宽。
trickle通过控制socket数据读写量来控制和限制应用的上传和下载速度。它使用另一个版本的BSD套接字API,但区别就是trickle还管理socket调用。要注意的是trickle使用动态链接和加载,所以只对于使用libc.so/glibc库的程序有用,其他的则无效的。由于trickle可以设置数据在socket上的传输延迟,因此就可以用来限制应用程序的网络带宽。

Trickle通过在程序运行时,预先加载一个 速率限制 socket 库 的方法,trickle命令允许你改变任意一个特定程序的流量。trickle 命令有一个很好的特性是它《仅在用户空间中》运行,这意味着,你不必需要 root 权限就可以限制一个程序的带宽使用。要能使用 trickle 程序控制程序的带宽,这个程序就必须使用非静态链接库的套接字接口。当你想对一个不具有内置带宽控制功能的程序进行速率限制时,trickle 就派上用场了。

TRICKLE不能做什么

Trickle不能用于限制使用UDP协议的应用的带宽,它只可用于TCP协议的连接,但是你要知道它也并不是对所有的TCP连接有效。如果你仔细看了Trickle是如果工作的,你可以猜到原因是什么,所以你还得记住trickle只对使用Glibc库应用有效。
还要说明一下, trickle无法工作在使用静态链接的可执行程序上。
确定Trickle是否可运行在某个特定应用上, 案例如下:

[root@master ~]# ldd /usr/bin/wget |grep --col libc.so libc.so.6 => /lib64/libc.so.6 (0x00007fe3e956e000) 

讯享网

ldd工具可以帮我们找出某个特定的程序是否使用了libc.so库, 如果程序使用了这个库,就可以使用trickle来限制它的网络带宽使用。ldd命令用于打印每个程序需要的共享库, 如果你是一个好奇宝宝,那么你可以使用man命令来找出关于ldd工具的更多信息,做编译安装程序和可移植的时候ldd命令很管用。

限制网络带宽命令(限速命令)

讯享网# 格式: trickle -s -d[下载速率,KB/s] -u[上传速率,KB/s] [选项例如wget等] -v Increase verbosity level -V Print trickle version -s 在独立模式下独立运行 -d <rate> 设置最大累计下载速率为 <rate> KB/s -u <rate> 设置最大累计上传速度为 <rate> KB/s -w <length> 设置窗口长度为 <length> KB 。默认512KB -t <seconds> 设置默认的平滑时间 <seconds> s 。平滑时间决定多少时间间隔trickle将尝试让应用程序传输数据。较小的值(0.1 - 1)会导致更连续(平滑)会话,非常适合于交互式应用。而较大的值(1 - 10)可能会产生一阵阵的发送和接收数据,对需要大量带宽的应用程序更好 -l <length> 设置默认的平滑长度 <length> KB 。 默认10 KB -n <path> 指定trickled socket名称 <path> 。 默认/tmp/.trickled.sock -L <ms> 设置延时 

安装

# 在 Ubuntu、Debian 及其衍生发行版中安装 trickle: sudo apt-get -y install trickle # 在 Fdora 或 CentOS/RHEL (带有 EPEL 软件仓库): sudo yum -y install trickle # 源码编译安装: wget https://codeload.github.com/mariusae/trickle/zip/master mv master trickle-master.zip unzip trickle-master.zip yum -y install autoconf automake libtool libevent-devel cd trickle-master autoreconf -if ./configure make make install 

ldd不是一个可执行程序,而只是一个shell脚本

讯享网[root@node1 ~]# file /usr/bin/ldd /usr/bin/ldd: Bourne-Again shell script, ASCII text executable 

这是’ ldd’命令,它列出了给定的动态链接可执行文件使用的共享库。它的工作方式是将运行时动态链接器作为命令调用,并将环境变量LD_TRACE_LOADED_OBJECTS设置为一个非空值。

简绍


讯享网

LD_TRACE_LOADED_OBJECTS LD_WARN LD_BIND_NOW LD_LIBRARY_VERSION LD_VERBOSE LD_DEBUG 

当LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时,它都会只显示模块的dependency,而程序并不真正执行。
例如:
1)export LD_TRACE_LOADED_OBJECTS=1
2)再执行任何的程序,如ls等,看看程序的运行结果

讯享网[root@zhz ~]# ls linux-vdso.so.1 => (0x00007ffc48b42000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f9504e0b000) libcap.so.2 => /lib64/libcap.so.2 (0x00007f9504c06000) libacl.so.1 => /lib64/libacl.so.1 (0x00007f95049fd000) libc.so.6 => /lib64/libc.so.6 (0x00007ff000) libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f95043cd000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f95041c9000) /lib64/ld-linux-x86-64.so.2 (0x00007f) libattr.so.1 => /lib64/libattr.so.1 (0x00007f9503fc4000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f9503da8000) 

ldd默认开启的环境变量是:LD_TRACE_LOADED_OBJECTS=1
其他的变量(和值)分别对应一些选项:

-d, --data-relocs -> LD_WARN=yes -r, --function-relocs ->LD_WARN和LD_BIND_NOW=yes -u, --unused -> LD_DEBUG=“unused” -v, --verbose -> LD_VERBOSE=yes 

LD_TRACE_LOADED_OBJECTS为必要环境变量,其他视具体情况。

撤销该环境变量,ls 即又可以恢复正常使用:

讯享网unset LD_TRACE_LOADED_OBJECTS 

ldd显示可执行模块的dependency的工作原理,其实质是通过ld-linux.so(elf动态库的装载器)来实现的。我们知道ld-linux.so模块会先于executable模块程序工作,并获得控制权,因此当上述的那些环境变量被设置时,ld-linux.so选择了显示可执行模块的dependency。
ldd命令的本质是执行了:/lib/ld-linux.so.*

实际上可以直接执行ld-linux.so模块,如:/lib/ld-linux.so.2 --list program(这相当于ldd program)
ldd可以获得的共享库文件,其实是通过读取ldconfig命令组建起来的文件(/etc/ld.so.cache)。
默认的共享库文件搜索/lib优先于/usr/lib,而且也只有这个2个目录。如果想要加入其他路径,则需要通过ldconfig命令配置相关文件。
一般ld-linux.so会按照以下顺序搜索共享库:
1、DT_RPATH或DT_RUNPATH段
2、环境变量LD_LIBRARY_PATH
3、/etc/ld.so.cache文件中的路径,但如果可执行程序在连接时候添加了-z nodeflib选项,则跳过。
4、默认路径/lib和/usr/lib,但如果添加了-z nodeflib,则跳过。

Usage: ldd [OPTION]... FILE... --help print this help and exit (获取指令帮助信息) --version print version information and exit (打印ldd的版本号) -d, --data-relocs process data relocations (执行重定位和报告任何丢失的对象) -r, --function-relocs process data and function relocations (执行数据对象和函数的重定位,并且报告任何丢失的对象和函数) -u, --unused print unused direct dependencies (打印未使用的直接依赖) -v, --verbose print all information (详细信息模式,打印所有信息,例如包括符号的版本信息) 

Behind every outstanding person, there is a period of silence

小讯
上一篇 2025-03-28 22:39
下一篇 2025-03-19 22:35

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/15085.html