pt-ioprofile是用来观察特定进程的IO信息的。

该脚本是用shell写的,有两方面的作用:

pt-ioprofile does two things: ) get lsof+strace for -s seconds, ) aggregate the result. If you specify a FILE, then step ) is not performed.

因实际依赖的是strace命令,该命令会对进程的性能造成较大的影响。所以,在负载较重的系统中,慎用。

使用方法:

直接执行pt-ioprofile即可,默认的是mysqld进程。

# pt-ioprofile

Sun Oct  :: CST
Tracing process ID
total pread read pwrite write fsync open close lseek fcntl filename
4.591996 0.000000 0.000000 0.088374 0.000000 4.503148 0.000219 0.000070 0.000000 0.000185 /test/sbtest5.ibd
2.720128 0.000000 0.000000 0.096999 0.000000 2.622662 0.000254 0.000053 0.000000 0.000160 /test/sbtest6.ibd
0.009918 0.000193 0.000515 0.000235 0.002752 0.004530 0.000491 0.000182 0.001020 0.000000 /test/#sql-693_153.frm
0.007725 0.000917 0.000000 0.002182 0.000000 0.003766 0.000285 0.000575 0.000000 0.000000 /test/
0.004819 0.000162 0.000587 0.000097 0.001044 0.001735 0.000349 0.000157 0.000688 0.000000 /test/sbtest6.frm
0.004201 0.000104 0.000309 0.000090 0.001048 0.001900 0.000265 0.000152 0.000333 0.000000 /test/sbtest5.frm
0.000661 0.000092 0.000209 0.000000 0.000000 0.000000 0.000105 0.000091 0.000164 0.000000 /tmp/ibUARemw
0.000643 0.000075 0.000254 0.000000 0.000000 0.000000 0.000128 0.000044 0.000142 0.000000 /test/sbtest4.frm
0.000228 0.000000 0.000000 0.000000 0.000000 0.000000 0.000143 0.000085 0.000000 0.000000 /tmp/ib2bbcaJ
0.000221 0.000000 0.000000 0.000000 0.000000 0.000000 0.000170 0.000051 0.000000 0.000000 /tmp/ibp3wGXR
0.000219 0.000000 0.000000 0.000000 0.000000 0.000000 0.000168 0.000051 0.000000 0.000000 /tmp/ibEDs8K7

其中,

read:从文件中读出数据。要读取的文件用文件描述符标识,数据读入一个事先定义好的缓冲区。

write:把缓冲区的数据写入文件中。

pread:由于lseek和read调用之间,内核可能会临时挂起进程,所以对同步问题造成了问题,调用pread相当于顺序调用了lseek和read,这两个操作相当于一个捆绑的原子操作。

pwrite:由于lseek和write调用之间,内核可能会临时挂起进程,所以对同步问题造成了问题,调用pwrite相当于顺序调用了lseek 和write,这两个操作相当于一个捆绑的原子操作。

fsync:确保文件所有已修改的内容已经正确同步到硬盘上,该调用会阻塞等待直到设备报告IO完成。

open:打开一个文件,并返回这个文件的描述符。

close:close系统调用用于“关闭”一个文件,close调用终止一个文件描述符以其文件之间的关联。文件描述符被释放,并能够重新使用。

lseek:对文件描述符指定文件的读写指针进行设置,也就是说,它可以设置文件的下一个读写位置。

fcntl:针对(文件)描述符提供控制。

看看各参数的作用:

--aggregate

统计的方式,默认是sum,也可指定为avg。

个人感觉avg没太大意义。

short form: -a; type: string; default: sum

The aggregate function, either sum or avg.

If sum, then each cell will contain the sum of the values in it. If avg, then each cell will contain the average of the values in it.

--cell

显示的单位,默认是times,即IO操作的时间,也可指定为count(O操作的次数),size(IO操作的大小)

如下所示:

--cell=times

# pt-ioprofile
Sun Oct :: CST
Tracing process ID
total pread read pwrite write fsync open close lseek fcntl filename
4.591996 0.000000 0.000000 0.088374 0.000000 4.503148 0.000219 0.000070 0.000000 0.000185 /test/sbtest5.ibd
2.720128 0.000000 0.000000 0.096999 0.000000 2.622662 0.000254 0.000053 0.000000 0.000160 /test/sbtest6.ibd
0.009918 0.000193 0.000515 0.000235 0.002752 0.004530 0.000491 0.000182 0.001020 0.000000 /test/#sql-693_153.frm
0.007725 0.000917 0.000000 0.002182 0.000000 0.003766 0.000285 0.000575 0.000000 0.000000 /test/
0.004819 0.000162 0.000587 0.000097 0.001044 0.001735 0.000349 0.000157 0.000688 0.000000 /test/sbtest6.frm
0.004201 0.000104 0.000309 0.000090 0.001048 0.001900 0.000265 0.000152 0.000333 0.000000 /test/sbtest5.frm
0.000661 0.000092 0.000209 0.000000 0.000000 0.000000 0.000105 0.000091 0.000164 0.000000 /tmp/ibUARemw
0.000643 0.000075 0.000254 0.000000 0.000000 0.000000 0.000128 0.000044 0.000142 0.000000 /test/sbtest4.frm
0.000228 0.000000 0.000000 0.000000 0.000000 0.000000 0.000143 0.000085 0.000000 0.000000 /tmp/ib2bbcaJ
0.000221 0.000000 0.000000 0.000000 0.000000 0.000000 0.000170 0.000051 0.000000 0.000000 /tmp/ibp3wGXR
0.000219 0.000000 0.000000 0.000000 0.000000 0.000000 0.000168 0.000051 0.000000 0.000000 /tmp/ibEDs8K7

--cell=sizes

# pt-ioprofile --cell=sizes
Sun Oct :: CST
Tracing process ID
total pread read pwrite write fsync open close lseek fcntl filename
/test1/sbtest3.ibd
/test1/sbtest2.ibd
/test1/sbtest4.ibd
/test1/
/test1/#sql-693_164.frm
/test1/sbtest3.frm
/test1/sbtest2.frm
/test1/sbtest4.frm
/test1/sbtest1.frm
/tmp/ibyD2qvV
/tmp/ibyc3Nz5
/tmp/ibJI3Ky8
/tmp/ibbLjhsI
/tmp/ib8QdnAm
/tmp/ib7oksHs

--cell=count

# pt-ioprofile --cell=count
Sun Oct :: CST
Tracing process ID
total pread read pwrite write fsync open close lseek fcntl filename
/test1/sbtest5.ibd
/test1/sbtest6.ibd
/test1/sbtest7.ibd
/test1/#sql-693_164.frm
/test1/sbtest6.frm
/test1/sbtest5.frm
/test1/sbtest7.frm
/test1/
/tmp/ibtLXAL6
/tmp/ibDei5Io
/tmp/ib2WdhKK
/tmp/ib027CfV
/test1/sbtest4.frm
short form: -c; type: string; default: times
The cell contents.
Valid values are:
VALUE CELLS CONTAIN
===== =======================
count Count of I/O operations
sizes Sizes of I/O operations
times I/O operation timing

--group-by

分组的单位,默认是filename,即对文件名进行统计,也可指定为all,即对所有操作进行统计,pid,对进程进行统计(不太确定这里的进程指的是什么?怀疑是线程,但线程不可能这么少,具体可参考下面的输出)

--group-by=filename

# pt-ioprofile
Sun Oct :: CST
Tracing process ID
total pread read pwrite write fsync open close lseek fcntl filename
4.591996 0.000000 0.000000 0.088374 0.000000 4.503148 0.000219 0.000070 0.000000 0.000185 /test/sbtest5.ibd
2.720128 0.000000 0.000000 0.096999 0.000000 2.622662 0.000254 0.000053 0.000000 0.000160 /test/sbtest6.ibd
0.009918 0.000193 0.000515 0.000235 0.002752 0.004530 0.000491 0.000182 0.001020 0.000000 /test/#sql-693_153.frm
0.007725 0.000917 0.000000 0.002182 0.000000 0.003766 0.000285 0.000575 0.000000 0.000000 /test/
0.004819 0.000162 0.000587 0.000097 0.001044 0.001735 0.000349 0.000157 0.000688 0.000000 /test/sbtest6.frm
0.004201 0.000104 0.000309 0.000090 0.001048 0.001900 0.000265 0.000152 0.000333 0.000000 /test/sbtest5.frm
0.000661 0.000092 0.000209 0.000000 0.000000 0.000000 0.000105 0.000091 0.000164 0.000000 /tmp/ibUARemw
0.000643 0.000075 0.000254 0.000000 0.000000 0.000000 0.000128 0.000044 0.000142 0.000000 /test/sbtest4.frm
0.000228 0.000000 0.000000 0.000000 0.000000 0.000000 0.000143 0.000085 0.000000 0.000000 /tmp/ib2bbcaJ
0.000221 0.000000 0.000000 0.000000 0.000000 0.000000 0.000170 0.000051 0.000000 0.000000 /tmp/ibp3wGXR
0.000219 0.000000 0.000000 0.000000 0.000000 0.000000 0.000168 0.000051 0.000000 0.000000 /tmp/ibEDs8K7

--group-by=all

# pt-ioprofile --group-by=all
Sun Oct :: CST
Tracing process ID
8.044078 TOTAL
7.781329 fsync
0.245823 pwrite
0.004445 write
0.003389 read
0.002998 open
0.002324 lseek
0.001886 close
0.001679 pread
0.000205 fcntl

--group-by=pid

# pt-ioprofile --group-by=pid
Sun Oct :: CST
Tracing process ID
total pread read pwrite write fsync open close lseek fcntl pid
5.468350 0.002442 0.004444 0.111051 0.007580 5.320658 0.002614 0.003022 0.016232 0.000307
1.093664 0.000000 0.000000 0.000000 0.000000 1.093664 0.000000 0.000000 0.000000 0.000000
0.997042 0.000000 0.000000 0.000000 0.000000 0.997042 0.000000 0.000000 0.000000 0.000000
0.940387 0.000000 0.000000 0.000000 0.000000 0.940387 0.000000 0.000000 0.000000 0.000000
0.507274 0.000000 0.000000 0.000000 0.000000 0.507274 0.000000 0.000000 0.000000 0.000000
short form: -g; type: string; default: filename
The group-by item.
Valid values are:
VALUE GROUPING
===== ======================================
all Summarize into a single line of output
filename One line of output per filename
pid One line of output per process ID

--help

Print help and exit.

--profile-pid

指定线程的ID

short form: -p; type: int

The PID to profile, overrides --profile-process.

--profile-process

指定线程名

short form: -b; type: string; default: mysqld

The process name to profile.

--run-time

执行strace命令的时间,OPT_RUN_TIME就是--run-time指定的值。

源码如下:

 if [ "$proc_pid" ]; then
echo "Tracing process ID $proc_pid" _lsof "$proc_pid" > "$samples" >&
if [ "$?" -ne "" ]; then
echo "Error: could not execute lsof, error code $?"
EXIT_STATUS=
return
fi strace -T -s -f -p $proc_pid >> "$samples" >& &
if [ "$?" -ne "" ]; then
echo "Error: could not execute strace, error code $?"
EXIT_STATUS=
return
fi
strace_pid=$!
# sleep one second then check to make sure the strace is
# actually running
sleep
ps -p $strace_pid > /dev/null >&
if [ "$?" -ne "" ]; then
echo "Cannot find strace process" >&
tail "$samples" >&
EXIT_STATUS=
return
fi
# sleep for interval -, since we did a one second sleep
# before checking for the PID of strace
if [ $((${OPT_RUN_TIME}-)) -gt ]; then
sleep $((${OPT_RUN_TIME}-))
fi kill -s $strace_pid sleep
kill -s $strace_pid >/dev/null # Sometimes strace leaves threads/processes in T status.
kill -s $proc_pid # Summarize the output we just generated.
tabulate_strace "$samples" > $PT_TMPDIR/tabulated_samples
type: int; default: 

How long to profile.

--save-samples

将strace和lsof获取的结果保存到指定的文件中

type: string

Filename to save samples in; these can be used for later analysis.

--version

Print the tool’s version and exit.

参考

1. http://blog.csdn.net/zongcai249/article/details/17598411

2. http://www.cnblogs.com/yanlingyin/archive/2012/08/04/2617209.html

3. http://blog.csdn.net/cywosp/article/details/8767327

pt-ioprofile的更多相关文章

  1. PX 和PT的区别

    字体大小的设置单位,常用的有2种:px.pt.这两个有什么区别呢? 先搞清基本概念:px就是表示pixel,像素,是屏幕上显示数据的最基本的点: pt就是point,是印刷行业常用单位,等于1/72英 ...

  2. css中单位px、pt、em和rem的区别

    国内的设计师大都喜欢用px,而国外的网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢? px :像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的.(引自CSS ...

  3. 快速安装Percona pt工具

    yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-Time-HiRes perl-IO-Socket-SSLwget http://pk ...

  4. ((uchar*)(Img1->imageData + Img1->widthStep*pt.y))[pt.x] 的 具体含义

    widthstep是指图像每行所占的字节数. 主要要和width区别: width是表示图像的每行像素数,widthStep指表示存储一行像素需要的字节数. 在OpenCV里边,widthStep必须 ...

  5. Android中的dp, px, pt

    定义: px是像素,表示屏幕显示的最小元素单位 pt是磅数,一磅等于1/72英寸,一般用来作为字体的单位使用 问题: px和pt不使用于手机,因为同样的px在高低分辨率的手机上显示的比例不同 解决办法 ...

  6. css中font-size的单位总结:px、em、pt

    px:基于像素的单位.像素是一种有用的单位,因为在任何媒体上都可以保证一个像素的差别确实是可见的.em :一般用来测量长度的通用单位(例如元素周转的页边空白和填充),当用于指定字体大小时,em单位是指 ...

  7. UI设计中px、pt、ppi、dpi、dp、sp之间的关系

    UI设计中px.pt.ppi.dpi.dp.sp之间的关系 武汉AAA数字艺术教育 2015-07-24 14:19:50 职业教育 pi px 阅读(3398) 评论(0) 声明:本文由入驻搜狐公众 ...

  8. 关于pt与px

    pt:point,点,是印刷业一个标准的长度单位,1pt=1/72英寸:  在Windows里,默认的显示设置中,把文字定义为96dpi.这说明了:1px=1/96英寸:而1pt=1/72英寸,可以得 ...

  9. Android中dip、dp、sp、pt和px的区别

    1.概述 过去,程序员通常以像素为单位设计计算机用户界面.例如:图片大小为80×32像素.这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,则用户界面会显得很小.在有些情况 ...

  10. 必备:常用px,pt,em换算表(转)

    常用px,pt,em换算表 pt (point,磅):是一个物理长度单位,指的是72分之一英寸. px (pixel,像素):是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果px要换算成物理 ...

随机推荐

  1. CSS 选择器及各样式引用方式

    Css :层叠样式表 (Cascading Style Sheets),定义了如何显示HTML元素. 目录 1. 选择器的分类:介绍ID.class.元素名称.符合.层次.伪类.属性选择器. 2. 样 ...

  2. C#向PPT文档插入图片以及导出图片

    PowerPoint演示文稿是我们日常工作中常用的办公软件之一,而图片则是PowerPoint文档的重要组成部分,那么如何向幻灯片插入图片以及导出图片呢?本文我将给大家分享如何使用一个免费版Power ...

  3. css样式之超出隐藏

    文本超出部分隐藏,总结两种方法. 1.单行隐藏 html代码 <div class="mi">当文字超过范围的时候,超出部分会隐藏起来.</div> css ...

  4. arcgis api for js入门开发系列七图层控制(含源代码)

    上一篇实现了demo的地图分屏对比模块,本篇新增图层控制模块,截图如下(源代码见文章底部): 图层控制模块实现的思路如下: 1.在地图配置文件map.config.js里面配置图层目录树节点信息,作为 ...

  5. 在将 varchar 值 'xinpian' 转换成数据类型 int 时失败?

    把int类型的值修改为varchar类型的值

  6. Winserver2012下mysql 5.7解压版(zip)配置安装

    一.安装 下载mysqlzip版本mysql不需要运行可执行文件,解压即可,下载zip版本mysqlmsi版本mysql双击文件即可安装,相对简单,本文不介绍此版本安装 配置环境变量打开环境变量配置页 ...

  7. Hyper-V上运行的Linux虚拟机验证是否安装了集成服务

    Hyper-V上运行的Linux虚拟机验证是否安装了集成服务 ps aux|grep "hv"root       311  0.0  0.0      0     0 ?     ...

  8. ReactNative入门 —— 动画篇(下)

    在上篇动画入门文章中我们了解了在 React Native 中简单的动画的实现方式,本篇将作为上篇的延续,介绍如何使用 Animated 实现一些比较复杂的动画. 动画组合 在 Animated 中提 ...

  9. 使用CSS3的box-shadow实现双透明遮罩层对话框

    box-shadow介绍 在我之前的一篇文章<从天猫和支付宝身上学习opcity与rgba>中,介绍了实现双透明遮罩层效果的两种方法,分别是opacity和rgba.他们需要分别依赖于不同 ...

  10. 在 Linux 打造属于自己的 Vim

    Linux 系统中很多东西都是以脚本代码.配置文件的形式存在,使用 Linux 系统时,需经常对这些文件进行编辑.很显然,如果没有文本编辑器,江湖之路寸步难行. 我的选择是 Vim.Vim 是 Lin ...