标签:
可不是 page view,是pipe viewer,管道偷窥器的缩写。这个东西的源站点在google code上,需要的话可以访问pv 的官网 。
这个东西的官方手册页(man pv或者pv(1))里面说,pv是一个让管道用户可以看到管道里发生什么事情的工具。可以看到管道处理的进度等等。
实际上,pv(1) 的命令行参数非常丰富。除了可以进行管道观察之外,还可以干很多事情。下面列举一些:
查看管道中的数据流速
查看管道中数据流动的时间
通过给出预期的数据大小,计算预期完成的时间
给管道内流动的数据传输速率限流
我们经常有各种限流的需求,比如,跨网络拷贝数据的时候、比如我们向磁盘书写数据的时候。为了避免过分占据网络带宽或者磁盘带宽,我们都要想办法做一些限流的事情。
而限流恰恰是一个挺麻烦的事情,有些工具有限流功能,比如 scp、rsync等,有些则没有,比如cp、tar、nc。这让我们的自动化脚本产生巨大的难度。
pv 最让人激动人心的功能,就是能通过参数对管道中的数据流动速度进行限流,这个参数是下面这个:
-L RATE, --rate-limit RATE
我们可以通过 k, m, g 的后缀来表示千、兆、吉的数量级,数据尺寸是“字节”。比如:
pv -L 300k
意思是让pv把管道中的数据流速限制在300K字节每秒。
为什么用管道限流呢?
因为我们知道,我们为了保持网络的礼貌,在生产环境中,尽量不要把带宽占满,有时候有些操作,是会把带宽占满的。比如,我们全速拷贝一个巨大的文件,很可能打击到一些网络薄弱的环节。而我们在自动化脚本中经常使用管道,如果我们可以利用管道限流,那么我们就完全可以在本地利用管道先把流量限制住,然后再使用各种形式的io,从而大大优化各种io环节,降低开销。而管道限流本身,基本上让我们可以对任意的支持标准输入输出的命令进行限流,这样其使用范围近乎是无限的。
在大多数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 命令看看这个命令实际使用的时间。
可以用类似下面的命令:
tar cf - result.data | pv -e -t -b -L 100k| ssh haha@jumphost.qunar.com ‘tar xvf -‘
标签:
原文地址:http://www.cnblogs.com/wjoyxt/p/4836919.html