前言:本文环境基于RHEL 5。
在有限的带宽条件下,我们自言往往要对占用带宽过大的程度限速,例如,只允许其占用最高1Mbps的带宽,或者使其下载速度不超过200Kbps,等等。因此,我们就需要流量控制(Traffic Control)工具。
我在网上找了一下,了解了几个:trickle,pyshaper,以及LINUX内核自带的tc。
(1)trickle(主页:http://monkey.org/~marius/pages/?page=trickle)是最简单的,只需要像这样启动某程序,该程序的速度就被限制在你设定的数字之间了:
# ./trickle -d 100 -u 30 /root/myapp
表示让程序myapp的速度限制在(最大)下载100K,上传30K之间。
本以为trickle是个惊喜,没想到一到它的官方网站一看,才知道它的最新版本已经是2003年的事了,我下载了它的源码安装包,在RHEL 5系统上尝试安装,make的时候,提示出错:“/usr/include/netinet/in.h:136: error: two or more data types in declaration specifiers”,查来查去,在Google上找到原因:trickle太老了,gcc 4无法编译,必须要降级为gcc 3才能编译。天啊,现在的LINUX几乎都是gcc 4了,哪个还会用gcc 3?于是放弃了trickle。
(2)pyshaper(主页:http://www.freenet.org.nz/python/pyshaper/)也是比较易于使用的流量控制工具,比trickle复杂一些。
关于pyshaper,我需要提醒你的一点是:很不好安装,浪费了我蛮多时间,我到最后还是没安装成,所以放弃了。
pyshaper依赖于python 2.2.2以上版本,下载源码安装包以后,不用make,直接make install就行。然后在命令行下就可以用命令来启动pyshaper了:
# pyshaper start
如果不出意外的话,你会和我一样,看到下面的错误提示:
ImportError: No module named ezsqlobject
看来是少了ezsqlobject(http://www.freenet.org.nz/python/ezsqlobject/)这个组件,于是我迅速Google,下载了ezsqlobject的源码安装包,记住这是一个python源码安装包,你要用如下命令来安装(没有make,make install之类的):
# python setup.py
然后,马上又提示错误了:
ImportError: Required package SQLObject not found.
原来ezsqlobject又依赖于另一个python组件 SQLObject(http://sqlobject.sourceforge.net/download.html),真雷人。
这下需要注意了,我们需要的SQLObject版本必须是0.6的,因为根据这一篇文章(http://ubuntuforums.org/archive/index.php/t-993210.html)的说法,高版本的SQLObject移除了一项叫做“DBMConnection”的功能,而pyshaper必须要用到这个功能。
为了下载到版本0.6的SQLObject,你需要安装easy_install工具,即:安装python-setuptools。我是在RHEL 5的rpm包里找到的python-setuptools-0.6c5-2.el5,然后rpm -ivh装上去,系统里就有easy_install工具了,然后:
easy_install SQLObject==0.6
这个命令就是想要安装版本为0.6的SQLObject,杯具的是,在我的RHEL 5上,提示出错:
No local packages or download links found for SQLObject==0.6
error: Could not find suitable distribution for Requirement.parse('SQLObject==0.6')
再耗下去,也没必要了,看来pyshaper只能跟我说再见了。
(3)tc是LINUX内核自带的一个极其强大的流量控制工具(Tc is used to configure Traffic Control in the Linux kernel),关于它的使用方法,请man tc。
正因为极其强大,所以学习曲线比较陡,如果你有较多时间,可以慢慢研究,应该可以配置出你想要的效果,但是如果没接触过tc,却又想在几分钟之内就实现像trickle一样的效果,恐怕是不可能的了。