发布网友 发布时间:2023-04-24 18:16
共1个回答
热心网友 时间:2023-10-12 23:10
使用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 中有一个叫做pt ioprofile 的工具就是使用strace 来生成I/O 活动的剖析报告的 这个工具很有帮助 可以证明或者驳斥某些难以测量的情况下的一些观点 此时其他方法很难达到目的(如果运行的是MySQL 使用Performance Schema 也可以达到目的)
返回目录 高性能MySQL
编辑推荐
ASP NET MVC 框架揭秘
Oracle索引技术
ASP NET开发培训视频教程
lishixin/Article/program/MySQL/201311/29692