• 管道限流利器pv


    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/秒

    可以用类似下面的命令:

    cd /opt ; tar cf - datadir | pv -e -t -b -L 10M| ssh haha@wjoyxt.com 'cd /opt ; tar xvf -'

  • 相关阅读:
    第十篇 数据类型总结
    第九篇 字典类型的内置方法
    第二篇 输入与输出以及基础运算符
    <爬虫实战>糗事百科
    <读书笔记>如何入门爬虫?
    <读书笔记>001-以解决问题为导向的python编程实践
    <小白学技术>将python脚本导出为exe可执行程序
    <Django> 第三方扩展
    <Django> 高级(其他知识点)
    <Django> MVT三大块之Template(模板)
  • 原文地址:https://www.cnblogs.com/wjoyxt/p/4836919.html
Copyright © 2020-2023  润新知