码迷,mamicode.com
首页 > 其他好文 > 详细

管道限流利器pv

时间:2015-09-25 00:12:09      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:

pv 是什么

可不是 page view,是pipe viewer,管道偷窥器的缩写。这个东西的源站点在google code上,需要的话可以访问pv 的官网 。

这个东西的官方手册页(man pv或者pv(1))里面说,pv是一个让管道用户可以看到管道里发生什么事情的工具。可以看到管道处理的进度等等。

pv 是干什么的

实际上,pv(1) 的命令行参数非常丰富。除了可以进行管道观察之外,还可以干很多事情。下面列举一些:

  1. 查看管道中的数据流速

  2. 查看管道中数据流动的时间

  3. 通过给出预期的数据大小,计算预期完成的时间

  4. 给管道内流动的数据传输速率限流

为什么用管道限流

我们经常有各种限流的需求,比如,跨网络拷贝数据的时候、比如我们向磁盘书写数据的时候。为了避免过分占据网络带宽或者磁盘带宽,我们都要想办法做一些限流的事情。

而限流恰恰是一个挺麻烦的事情,有些工具有限流功能,比如 scp、rsync等,有些则没有,比如cp、tar、nc。这让我们的自动化脚本产生巨大的难度。

pv 最让人激动人心的功能,就是能通过参数对管道中的数据流动速度进行限流,这个参数是下面这个:

-L RATE, --rate-limit RATE

我们可以通过 k, m, g 的后缀来表示千、兆、吉的数量级,数据尺寸是“字节”。比如:

pv -L 300k

意思是让pv把管道中的数据流速限制在300K字节每秒。

为什么用管道限流呢?

因为我们知道,我们为了保持网络的礼貌,在生产环境中,尽量不要把带宽占满,有时候有些操作,是会把带宽占满的。比如,我们全速拷贝一个巨大的文件,很可能打击到一些网络薄弱的环节。而我们在自动化脚本中经常使用管道,如果我们可以利用管道限流,那么我们就完全可以在本地利用管道先把流量限制住,然后再使用各种形式的io,从而大大优化各种io环节,降低开销。而管道限流本身,基本上让我们可以对任意的支持标准输入输出的命令进行限流,这样其使用范围近乎是无限的。

获取pv

在大多数RedHat基础的服务器上,直接用yum就可以安装:

sudo yum install pv

slackware 则可以去 slackbuilds.org 获取制作包制作 txz 安装包。最辛苦的可以去上面的 google code 下载源代码,然后编译安装,编译安装的标准方法就是:

tar zxvf .. cd pv... ./configure make make install

的过程。

用法和例子

我想看看一个慢速的查询是否发生了数据传输

我有个不快的查询,大概要好几分钟跑完,并且获取的数据也比较多,我想试试执行一下,看看大概会有多久:

time psql -U qa -h somehost.qunar.com -d vacation -f t3.sql | pv -t -r > /dev/nul

查询保存在 t3.sql 里头,我链接到测试库进行测试,这个 sql 会把数据 copy 到标准输出上。然后,我用 pv 查看前面 psql 的标准输出管道,我让 pv 记录时间:

-t

选项,纪录传输速率:

-r

选项。

然后用开头的 time 命令看看这个命令实际使用的时间。

我想传输一个大数据到rtools1上头,但是需要限流100k/秒

可以用类似下面的命令:

tar cf - result.data | pv -e -t -b -L 100k| ssh haha@jumphost.qunar.com ‘tar xvf -‘

管道限流利器pv

标签:

原文地址:http://www.cnblogs.com/wjoyxt/p/4836919.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!