管道限流利器pv
pv 是什么
可不是 page view,是pipe viewer,管道偷窥器的缩写。这个东西的源站点在google code上,需要的话可以访问pv 的官网 。
这个东西的官方手册页(man pv或者pv(1))里面说,pv是一个让管道用户可以看到管道里发生什么事情的工具。可以看到管道处理的进度等等。
pv 是干什么的
实际上,pv(1) 的命令行参数非常丰富。除了可以进行管道观察之外,还可以干很多事情。下面列举一些:
查看管道中的数据流速
查看管道中数据流动的时间
通过给出预期的数据大小,计算预期完成的时间
给管道内流动的数据传输速率限流
为什么用管道限流
我们经常有各种限流的需求,比如,跨网络拷贝数据的时候、比如我们向磁盘书写数据的时候。为了避免过分占据网络带宽或者磁盘带宽,我们都要想办法做一些限流的事情。
而限流恰恰是一个挺麻烦的事情,有些工具有限流功能,比如 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的更多相关文章
- JUC 中提供的限流利器-Semaphore(信号量)
在 JUC 包下,有一个 Semaphore 类,翻译成信号量,Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源.Semaphore 跟锁 ...
- Redis解读(4):Redis中HyperLongLog、布隆过滤器、限流、Geo、及Scan等进阶应用
Redis中的HyperLogLog 一般我们评估一个网站的访问量,有几个主要的参数: pv,Page View,网页的浏览量 uv,User View,访问的用户 一般来说,pv 或者 uv 的统计 ...
- 高并发之 API 接口,分布式,防刷限流,如何做?
在开发分布式高并发系统时有三把利器用来保护系统:缓存.降级.限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解 ...
- WCF Throttling 限流的三道闸口
WCF Throttling 限流的三道闸口 一.WCF Throttling 流量限制简介 我们期望WCF服务端能够处理尽可能多的并发请求,但是资源是有限的,服务不可能同时处理无限多的并发请求,如 ...
- Java 对IP请求进行限流.
高并发系统下, 有三把利器 缓存 降级 限流. 缓存: 将常用数据缓存起来, 减少数据库或者磁盘IO 降级: 保护核心系统, 降低非核心业务请求响应 限流: 在某一个时间窗口内对请求进行限速, 保护系 ...
- 超详细的Guava RateLimiter限流原理解析
超详细的Guava RateLimiter限流原理解析 mp.weixin.qq.com 点击上方“方志朋”,选择“置顶或者星标” 你的关注意义重大! 限流是保护高并发系统的三把利器之一,另外两个是 ...
- 【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流
[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我介绍了如何在网关上增加自定义客户端授权功能,从设计到编码实现,一步一步详细讲解,相信大家也掌握了自定义中间件的开发技巧了,本篇我们 ...
- 高并发之API接口限流
在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再 ...
- 互联网进行限流策略的Semaphore信号量使用
在Semaphore信号量非常适合高并发访问,新系统在上线之前,要对系统的访问量进行评估,当然这个值肯定不是随便拍拍脑袋就能想出来的,是经过以往的经验.数据.历年的访问量,已经推广力度进行一个合理的评 ...
随机推荐
- yarn 制作 npm 包
yarn publish yarn info [package_name]
- c#问题(按F1或F2键时触发事件)
this.KeyPreview = true;...private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArg ...
- 如何在MFC DLL中向C#类发送消息
如何在MFC DLL中向C#类发送消息 一. 引言 由于Windows Message才是Windows平台的通用数据流通格式,故在跨语言传输数据时,Message是一个不错的选择,本文档将描述如何在 ...
- Thinkphp自动验证规则
其实说白了,这篇文章就是转给自己看的,省的下次用的时候满网络找了.有需要的同学也可以看看.自动验证是非常有用的一个技术.平常的验证基本就是,用户名是否为空,用户名是否重复,密码,重复密码是否一致.官方 ...
- PHP解析xml文件时报错:I/O warning : failed to load external entity
在代码顶部增加 libxml_disable_entity_loader(false); libxml_disable_entity_loader()作用是设置是否禁止从外部加载XML实体,设为tru ...
- Linux基本操作命令及作用
文件和目录操作命令 命令 作用 cd change directory,切换目录 cp copy,其功能为复制文件或目录 find 用于查找目录或文件 mv move ,移动或重命名文件或目录 pwd ...
- Win10 UEFI +Ghost +intel快速启动 新法完美安装
http://tieba.baidu.com/p/4767004289?qq-pf-to=pcqq.c2c Win10 如果主板不用Bios 而用UEFI引导启动,速度快,界面好.现在一般都用win1 ...
- 如何在 QWidget 窗口上弹出右键菜单
Title : QWidget 窗口上弹出右键菜单的两个方法 Solution 1 : 给一个 QWidget 添加 QActions,设置 QWidget 的 contextMenuPolicy 属 ...
- Mac 配置多jdk 随意切换
1下载安装 jdk6:https://support.apple.com/kb/DL1572?locale=zh_CN 2配置环境变量 open .bash_profile export PATH=$ ...
- POJ 1182 食物链(并查集的使用)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 81915 Accepted: 24462 Description ...