[原写于2013年2月]

如果一台服务器上跑很多应用,对资源的隔离当然是不言而喻的,但是很多时候,你即使在一台机器上就跑一个应用,也可能需要资源控制。比如,你的服务器是提供在线查询服务的,数据放在硬盘上,部分热数据在内存中,一切顺利,但是,某天你在这台服务器上scp数据文件过来时,发现磁盘被拷文件的操作压得喘不过气,以至于查询服务都受到了影响,那这时该怎么办?当然,我们可以用scp -l 来限制拷贝的带宽,避免对磁盘的巨大压力,但如果同步数据不是用的scp,是用户自己的某个工具或者是自己写的某个程序,那么还需要去改程序吗?难道每个用户开发的程序都要带上控制带宽和资源使用率的功能?

现在比较建议的解决办法是用cgroup来隔离资源,而到io层面,常用的就是iothrottle。iothrottle已经在公司的生产环境中使用,最近运维考虑扩大使用范围,所以针对运维和DBA的一些疑问,我做了一些iothrottle的测试,不是什么高深的测试方法,但是确实能回答使用者的一些问题,测试报告见

kernel.taobao.org

希望能给大家一些帮助,和信心