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. ABP框架 - Swagger UI 集成

    文档目录 本节内容: 简介 Asp.net Core 安装 安装Nuget包 配置 测试 Asp.net 5.x 安装 安装Nuget包 配置 测试 简介 来自它的网页:“...使用一个Swagger ...

  2. 探索ASP.NET MVC5系列之~~~6.Session篇(进程外Session)

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  3. Convert BSpline Curve to Arc Spline in OpenCASCADE

    Convert BSpline Curve to Arc Spline in OpenCASCADE eryar@163.com Abstract. The paper based on OpenCA ...

  4. Win.ini和注册表的读取写入

    最近在做打包的工作,应用程序的配置信息可以放在注册表文件中,但是在以前的16位操作系统下,配置信息放在Win.ini文件中.下面介绍一下Win.ini文件的读写方法和注册表的编程. 先介绍下Win.i ...

  5. 使用SecureCRT连接虚拟机(ubuntu)配置记录

    这种配置方法,可以非常方便的操作虚拟机里的Linux系统,且让VMware在后台运行,因为有时候我直接在虚拟机里操作会稍微卡顿,或者切换速度不理想,使用该方法亲测本机效果确实ok,特此记录. Secu ...

  6. BPM合同管理解决方案分享

    一.方案概述合同是组织与组织间所订协议的法律 表现形式,体现着双方对于合作在法律和道德上的承诺.然而,大多数企业的合同管理都或多或少存在合同审批过程不规范.签订草率.审批权责不清.合同执行跟踪难.合同 ...

  7. [Hadoop in Action] 第7章 细则手册

    向任务传递定制参数 获取任务待定的信息 生成多个输出 与关系数据库交互 让输出做全局排序   1.向任务传递作业定制的参数        在编写Mapper和Reducer时,通常会想让一些地方可以配 ...

  8. Win10连接远程桌面时提示“您的凭据不工作”

    我遇到这个问题的时候查找网上都给出一堆高大上的解决办法, 然而我的错误实际上是用户名的问题, 很多人以为远程用户名就一定是锁屏状态下的登录名, 其实不是,跟自己设置有关,所以首先应该检查远程用户名是否 ...

  9. linux压力测试工具stress

    最近给PASS平台添加autoscaling的功能,根据服务器的负载情况autoscaling,为了测试这项功能用到了stress这个压力测试工具,这个工具相当好用了.具体安装方式就不说了.记录下这个 ...

  10. ELK分析IIS日志

      LogStash.conf input { file { type => "iis_log" path => ["C:/inetpub/logs/LogF ...