您的位置:首页 > 运维架构 > Linux

LINUX下如何对一个程序限速

2010-03-10 16:30 218 查看
前言:本文环境基于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一样的效果,恐怕是不可能的了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: