41.5. SystemTap 脚本的有用示例
随 SystemTap 的安装一起分发的示例脚本可在 /usr/share/systemtap/examples 目录中找到。
您可以使用 stap 命令执行不同的 SystemTap 脚本:
- 追踪函数调用
您可以使用
para-callgraph.stpSystemTap 脚本追踪函数调用和函数返回。stap para-callgraph.stp argument1 argument2
# stap para-callgraph.stp argument1 argument2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 脚本接受两个命令行参数:您要跟踪其进入/退出的函数的名称。可选的触发器功能,用于在每个线程上启用或禁用追踪。只要触发器功能还没有退出,每个线程中的追踪将继续。
- 监控轮询应用程序
您可以使用 timeout.stp SystemTap 脚本识别和监控哪些应用程序正在轮询。了解这一点后,您可以跟踪不必要的或大量的轮询,这有助于找出 CPU 使用率和节能方面需要改进的地方。
stap timeout.stp
# stap timeout.stpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此脚本跟踪每个应用程序随着时间的推移,使用
poll、select、epoll、itimer、futex、nanosleep和Signal系统调用的次数- 跟踪每个进程的系统调用量
您可以使用
syscalls_by_proc.stpSystemTap 脚本查看哪些进程正在执行最多的系统调用。它显示执行最多系统调用的 20 个进程。stap syscalls_by_proc.stp
# stap syscalls_by_proc.stpCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 追踪网络套接字代码中调用的函数
您可以使用
socket-trace.stp示例 SystemTap 脚本跟踪从内核的 net/socket.c 文件中调用的功能。这帮助您详细识别每个进程在内核层面上如何与网络进行交互。stap socket-trace.stp
# stap socket-trace.stpCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 跟踪每个文件读或写的 I/O 时间
您可以使用
iotime.stpSystemTap 脚本监控每个进程读取或写入任何文件所需的时间。这有助于您确定系统上载入哪些文件。stap iotime.stp
# stap iotime.stpCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 跟踪 IRQ 和从任务中窃取周期的其它进程
您可以使用
cycle_thief.stpSystemTap 脚本跟踪任务运行的时间以及其没有运行的时间。这帮助您识别哪些进程正在从任务中窃取周期。stap cycle_thief.stp -x pid
# stap cycle_thief.stp -x pidCopy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以在 /usr/share/systemtap/examples/index.html 文件中找到有关 SystemTap 脚本的更多示例和信息。在 Web 浏览器中打开它,以查看所有可用的脚本及其描述的列表。