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 -'

管道限流利器pv的更多相关文章

  1. JUC 中提供的限流利器-Semaphore(信号量)

    在 JUC 包下,有一个 Semaphore 类,翻译成信号量,Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源.Semaphore 跟锁 ...

  2. Redis解读(4):Redis中HyperLongLog、布隆过滤器、限流、Geo、及Scan等进阶应用

    Redis中的HyperLogLog 一般我们评估一个网站的访问量,有几个主要的参数: pv,Page View,网页的浏览量 uv,User View,访问的用户 一般来说,pv 或者 uv 的统计 ...

  3. 高并发之 API 接口,分布式,防刷限流,如何做?

    在开发分布式高并发系统时有三把利器用来保护系统:缓存.降级.限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解 ...

  4. WCF Throttling 限流的三道闸口

    WCF Throttling 限流的三道闸口 一.WCF Throttling  流量限制简介 我们期望WCF服务端能够处理尽可能多的并发请求,但是资源是有限的,服务不可能同时处理无限多的并发请求,如 ...

  5. Java 对IP请求进行限流.

    高并发系统下, 有三把利器 缓存 降级 限流. 缓存: 将常用数据缓存起来, 减少数据库或者磁盘IO 降级: 保护核心系统, 降低非核心业务请求响应 限流: 在某一个时间窗口内对请求进行限速, 保护系 ...

  6. 超详细的Guava RateLimiter限流原理解析

    超详细的Guava RateLimiter限流原理解析  mp.weixin.qq.com 点击上方“方志朋”,选择“置顶或者星标” 你的关注意义重大! 限流是保护高并发系统的三把利器之一,另外两个是 ...

  7. 【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流

    [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我介绍了如何在网关上增加自定义客户端授权功能,从设计到编码实现,一步一步详细讲解,相信大家也掌握了自定义中间件的开发技巧了,本篇我们 ...

  8. 高并发之API接口限流

    在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再 ...

  9. 互联网进行限流策略的Semaphore信号量使用

    在Semaphore信号量非常适合高并发访问,新系统在上线之前,要对系统的访问量进行评估,当然这个值肯定不是随便拍拍脑袋就能想出来的,是经过以往的经验.数据.历年的访问量,已经推广力度进行一个合理的评 ...

随机推荐

  1. 【转】Android开源项目(非组件)

    原文网址:http://blog.csdn.net/feizhixuan46789/article/details/9252887 学习开发一个有效的途径就是借鉴成熟的案例作为学习的对象,下面为大家推 ...

  2. JUC线程池之 线程池拒绝策略

    拒绝策略介绍 线程池的拒绝策略,是指当任务添加到线程池中被拒绝,而采取的处理措施. 当任务添加到线程池中之所以被拒绝,可能是由于:第一,线程池异常关闭.第二,任务数量超过线程池的最大限制. 线程池共包 ...

  3. sqlserver 同义名的使用

    USE [ccflow5]GOdrop synonym ccusergo/****** Object:  Synonym [dbo].[ccuser]    Script Date: 11/12/20 ...

  4. Linux Home目录硬盘空间缩减

    Linux Home目录硬盘空间缩减 操作   基于centos6.5 x86_64, runlevel 3,命令行模式,测试成功. 1.首先查看磁盘使用情况 [root@localhost ~]# ...

  5. Windows 客户端时间更新脚本NTP

    Windows XP 客户端时间更新脚本NTP ::Windows XP 客户端时间更新脚本NTP reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsof ...

  6. css-inline-block和float的布局二者择其一?

    几个月前,带着不甘和忐忑毅然决然的在亚马逊离职了,当时不知道对我来说是好是坏,现在看来,当初的选择还是蛮不错的.感觉在亚马逊的几个月貌似接触最多的就是wiki和tt了,怀着对技术热忱离开,拒绝了腾讯, ...

  7. WDA编译失败问题

    1.放假回来,wda编译失败,报错如下 2018-09-25 10:03:09.020964+0800 WebDriverAgentRunner-Runner[335:33309] +[CATrans ...

  8. javascript创建对象之寄生构造函数模式(六)

    这种模式的基本思想是创建一个函数,该函数的作用仅仅是封装创建对象的代码,然后再返回新创建的对象; 但是从表面上看,这个函数有很像典型的构造函数. function createHuman(name,s ...

  9. CGLib缺少jar出现 java.lang.ClassNotFoundException: org.objectweb.asm.Type

    CGLib实现动态代理区别于JDK动态代理,不需要目标类实现任何接口,是通过生成代理类子类的方式,而且据说速度要快于JDK动态代理.所以我想要试验一下CGlib的动态代理,网上找了些例子,自己动手写了 ...

  10. unicode 转码 ansi

    #include "stdafx.h"#include <Windows.h>#include <stdio.h> HRESULT SomeCOMFunct ...