使用strace
strace 工具可调查系统调用的情况有好几种可以使用的方法其中一种是计算系统调用的时间并打印出来
$ strace cfp $(pidof mysqld)
Process attached with threads interrupt to quit
^CProcess detached
% time seconds usecs/call calls errors syscall
select
futex
read
unlink
write
pread
_llseek
[some lines omitted for brevity]
total
这种用法和oprofile 有点像但是oprofile 还可以剖析程序的内部符号而不仅仅是系统调用另外strace 拦截系统调用使用的是不同于oprofile 的技术这会有一些不可预期性开销也更大些strace 度量时使用的是实际时间而oprofile 使用的是花费的CPU 周期举个例子当I/O 等待出现问题的时候strace 能将它们显示出来因为它从诸如read或者pread 这样的系统调用开始计时直到调用结束但oprofile 不会这样因为I/O系统调用并不会真正地消耗CPU 周期而只是等待I/O 完成而已
我们会在需要的时候使用oprofile因为strace 对像mysqld 这样有大量线程的场景会产生一些副作用当strace 附加上去后mysqld 的运行会变得很慢因此不适合在产品环境中使用但在某些场景中strace 还是相当有用的Percona Toolkit 中有一个叫做ptioprofile 的工具就是使用strace 来生成I/O 活动的剖析报告的这个工具很有帮助可以证明或者驳斥某些难以测量的情况下的一些观点此时其他方法很难达到目的(如果运行的是MySQL 使用Performance Schema 也可以达到目的)
返回目录高性能MySQL
编辑推荐
ASPNET MVC 框架揭秘
Oracle索引技术
ASP NET开发培训视频教程
数据仓库与数据挖掘培训视频教程