From what I can see, a DTrace implementation on Linux is held up by licensing and politics. What are the alternatives currently?
6 回答
Systemtap旨在解决与 dtrace 相同的问题,并具有类似的用户界面——用户编写将操作附加到命名探针的小脚本。
据说它是不稳定的,默认情况下它通常不会编译到您的内核中,但是一旦我让它工作,我就没有任何问题。
您可以在 systemtap 网站上的此表中查看它与 dtrace 的比较(可能是党派 :-)
Dtrace 已由爱好者 Paul Fox 部分移植到 Linux,您可以下载并试用 - 查看他博客上的链接。
有人说kprobes是 dtrace 的替代品,但我从未尝试过。
sysdig
现在是一个很好的解决方案。
一些用例包括(他们的wiki 有一些非常有趣的例子):
对于磁盘 I/O
查看磁盘带宽使用率最高的进程
sysdig -c topprocs_file
列出使用大量文件的进程
sysdig -c fdcount_by proc.name "fd.type=file"
查看读+写字节数排名靠前的文件
sysdig -c topfiles_bytes
打印 apache 一直在读取或写入的顶级文件
sysdig -c topfiles_bytes proc.name=httpd
基本 opensnoop:snoop 文件在发生时打开
sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open
根据 R+W 磁盘活动查看顶级目录
sysdig -c fdbytes_by fd.directory "fd.type=file"
查看 /tmp 目录中关于 R+W 磁盘活动的顶级文件
sysdig -c fdbytes_by fd.filename "fd.directory=/tmp/"
观察所有名为“passwd”的文件的 I/O 活动
sysdig -A -c echo_fds "fd.filename=passwd"
按 FD 类型显示 I/O 活动
sysdig -c fdbytes_by fd.type
Oracle 正在将 DTrace 移植到 linux:https ://oss.oracle.com/projects/DTrace/
不知道这是否仅适用于他们的 linux 发行版或其他任何发行版。
Linux 有 strace/ltrace(参见这篇关于 strace 的文章)。但它们并不真正等同于 DTrace,它们只涵盖了 DTrace 可以做的一小部分(实际上,DTrace 远远优于 Linux 提供的任何东西)。