今天推荐的文章讲述的是作者的操作系统莫名其妙地出现很多的系统调用,最后查出的原因是一台打印机引起的。作者利用DTrace
一步一步debug
的过程很值得我们学习和借鉴。另外,我从这篇文章中也学到了很多好用的英语短语,像“roll with the punches
”,“flex muscles
”等等。总[……]
分享一篇文章《How My Printer Caused Excessive Syscalls & UDP Traffic》
Leave a reply
modcalls.d
位于DTraceToolkit的Kernel
文件夹下,其功能是统计不同模块调用kernel
函数的次数。脚本代码就一行(略去版权信息):
fbt:::entry { @calls[probemod] = count(); }
脚本代码分析如下:
监听fbt Provi[......]
syscallbyproc.d
位于DTraceToolkit的Proc
文件夹下,其功能是统计进程使用系统调用的次数。脚本代码就一行(略去版权信息):
syscall:::entry { @num[execname] = count(); }
脚本代码分析如下:
监听syscall Pr[......]
昨天看到Adam
发的推特:“hoping for DTrace in the next Red Star OS update!
”,我就在想:如果想把DTrace
移植到一个新的操作系统上,从哪里获得DTrace
的源码包呢?现在Mac OS X
,FreeBSD
都有DTrace
了,难道从这些系统上fork[......]
creatbyproc.d
位于DTraceToolkit的Proc
文件夹下,其功能是打印调用creat
系统调用的进程名和创建的文件名。脚本代码就一行(略去版权信息):
syscall::creat*:entry { printf("%s %s", execname, copyinstr(arg[......]