1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

分享一篇文章《How My Printer Caused Excessive Syscalls & UDP Traffic》

今天推荐的文章讲述的是作者的操作系统莫名其妙地出现很多的系统调用,最后查出的原因是一台打印机引起的。作者利用DTrace一步一步debug的过程很值得我们学习和借鉴。另外,我从这篇文章中也学到了很多好用的英语短语,像“roll with the punches”,“flex muscles”等等。总之,建议大家有时间可以看看,相信会有所收获的。

1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

DTraceToolkit脚本解析(10)-modcalls.d

modcalls.d位于DTraceToolkitKernel文件夹下,其功能是统计不同模块调用kernel函数的次数。脚本代码就一行(略去版权信息):

fbt:::entry { @calls[probemod] = count(); }

脚本代码分析如下:
监听fbt Provider的 entry probefbt Provider几乎提供了对所有kernel函数的entryexittrace)。定义calls这个aggregation,用probemodkeyprobemod记录了当前probe的模块名)。当probe触发后,把calls里相应模块的统计次数加[……]

阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

DTraceToolkit脚本解析(9)-syscallbyproc.d

syscallbyproc.d位于DTraceToolkitProc文件夹下,其功能是统计进程使用系统调用的次数。脚本代码就一行(略去版权信息):

syscall:::entry { @num[execname] = count(); }

脚本代码分析如下:
监听syscall Provider的 entry probeexecname内置变量记录了进程名,作为num这个aggregationkey。当probe触发后,把num里相应进程的统计次数加1

执行脚本,输出如下:

Nans-MacBook-Pro:Proc root# ./syscallbyproc.d[......]

阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

从哪里获得DTrace的源码包?

昨天看到Adam发的推特:“hoping for DTrace in the next Red Star OS update!”,我就在想:如果想把DTrace移植到一个新的操作系统上,从哪里获得DTrace的源码包呢?现在Mac OS XFreeBSD都有DTrace了,难道从这些系统上fork出来DTrace的代码?

我发了一封邮件给社区,很快就收到了Robert Mustacchi的回复:从illumos代码库(https://github.com/illumos/illumos-gate)可以得到所有DTrace的代码(包含一些增强的功能),此外DTrace是遵守CDDL协议的。

[……]

阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

DTraceToolkit脚本解析(8)-creatbyproc.d

creatbyproc.d位于DTraceToolkitProc文件夹下,其功能是打印调用creat系统调用的进程名和创建的文件名。脚本代码就一行(略去版权信息):

syscall::creat*:entry { printf("%s %s", execname, copyinstr(arg0)); }

脚本代码分析如下:
监听creat(或者creat64)系统调用的 entry probe,其中arg0参数记录了要创建的文件名。当probe触发后,打印进程名和创建的文件名。

执行脚本,输出如下:

bash-3.2# ./creatbyproc.d
dtrace:[......]

阅读全文