1.构建工具模块
构建指定内核版本的模块,这个时候可移植。
stap -p4 -r kernel_version script -m module_name //parse, elaborate, translate(.c), compile(.ko), run
stap -g -F -DSTP_NO_OVERLOAD -DMAXMAPENTRIES= -DMAXACTION= -p4 -r $(uname -r) "+working_dir+"stpfile/syscall.stp "+working_dir+"kofile -m
2.运行构建的模块
将其加载到运行的内核中执行
staprun module_name.ko
staprun -vv "+working_dir+"kofile/ksyscallmo.ko
stap的参数
https://sourceware.org/systemtap/SystemTap_Beginners_Guide/using-usage.html
-v[v?]? 展示详细的信息,想查运行中的脚本出错情况用-vvv -e #把字符串的话当脚本执行 stap -e 'probe vfs.read {exit()}' -v 相当于 echo "probe timer.s(1) {exit()}" | stap -v - -o file_name #标准输出输出的奥file_name这个文件 -S size,count 将输出文件的最大大小限制为 MB 大小和要计数的最大存储文件数。此选项为 SystemTap 实现 logrotate 操作,并且生成的文件名具有序列号后缀。 -x process_id Sets the SystemTap handler function target() to the specified process ID. -c 'command' 给脚本添加参数 例:stap script_name -c command 相当于 script -x processID -F 使用 SystemTap 的飞行记录器模式脚本后台运行。
SystemTap的飞行记录器模式
SystemTap的飞行记录器模式可以长时间运行SystemTap脚本,只需专注于最近的输出。飞行记录器模式限制生成的输出量。
飞行记录仪模式有两种变体。在这两种情况下,SystemTap 脚本都作为后台进程运行
- 内存模式
stap -F sleep.stp# 内存模式下飞行 -s 参数设置缓冲区大小,默认1MB -------output-------- Disconnecting from systemtap module. To reconnect, type "staprun -A stap_9a0b1e90e8167d9f37a4c8a31dba65e_7547" - 文件模式。stap会自动给文件加后缀,后缀越大,表示文件越新。
stap -F -o /tmp/pfaults.log -S 1,2 pfaults.stp# 加了输出到文件,所以是文件模式下飞行 #-S参数可以控制输出的文件大小和文件数量比如上面的命令表示生成的输出文件名为 /tmp/pfaults.log.[0-9]+,每个文件最大1MB,只保留最新的两个文件。
以上命令会打印出后台进程id号。
[root@centos7 test]# stap -F sleep.stp -o ./result/output.log -S 1,2 7044 [root@centos7 test]# ps -ef|grep 7044 root 7044 1 0 11:14 ? 00:00:00 /usr/libexec/systemtap/stapio -o ./result/output.log -D -R -S 1,2 stap_f21be02d803bce06b9fd8c4448c2396_7042 -F3
- 终止执行:
kill -s SIGTERM 7044
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230027.html原文链接:https://javaforall.net
