SystemTap工具的使用基础

简介: systemtap工具的安装准备工作uname -a查看当前内核版本是哪一个,然后使用yum install kernel-devel安装kernel debuginfo包rpm -qi kernel-devel找到内核构建的详细信息,然后去对应发布网站上找kernel-debuginfo和kernel-debuginfo-common包。

systemtap工具的安装

准备工作

uname -a

查看当前内核版本是哪一个,然后使用

yum install kernel-devel

安装kernel debuginfo包

rpm -qi kernel-devel

找到内核构建的详细信息,然后去对应发布网站上找kernel-debuginfo和kernel-debuginfo-common包。

安装systemtap包

yum install systemtap

测试

完成安装后可以通过下面命令测试systemtap

stap -ve ‘probe begin { print(“hello world\n”) exit()}’

进行测试,看看systemtap有无安装成功。

systemtap常规命令

查看某个函数可以查看的target变量

下面命令演示查看__lookup_hash()函数返回时刻可以查看到的变量

stap -ve ‘probe kernel.function(“__lookup_hash”).return’ //查看__lookup_hash()函数返回时刻可以systemtap工具可以查看的target变量。
kernel.function(“__lookup_hash@fs/namei.c:1383”).return return:structdentryname:struct qstr* base:structdentryflags:unsigned int $need_lookup:bool

在上表中显示了lookup_hash在文件中的行号,显示了名为returnreturnsystemtapname,base,flag我们对着linux源码看发现这是__lookup_hash的三个入参。
下面命令可以查看__lookup_hash函数入口可以查看的变量

stap -L ‘probe kernel.function(__lookup_hash)’

使用systemtap打印目标函数的变量

systemtap支持print()和printf()函数,其中printf使用语法和c语言一致。支持%s,%d,%x格式

常用变量

内部变量名 功能 其他
$$locals 探测点上所有的本地变量(含参数) n/a
$$parms 探测点上函数的参数 n/a
$$returns 探测点上所有的返回值 只对return probe生效

变量的显示方式

在systemtap里凡是以$开头的变量都是目标变量,如果目标变量结构体指针或者结构体对象,那么可以使用->直接访问其成员。例如上例中:

$return->d_inode //就是__lookup_hash()返回值dentry* 的d_inode成员的值。

常规情况下,printf()打印target变量时刻,只打印其值。如果需要将其成员(指针类型的target需要将其指向的对象的成员展开)可以在target变量后面加$的方式例如:

return //显示返回值指向的dentry所有成员。

一般情况下对struct的展开只会到成员值一级,如果相对成员内部继续展开可以在目标变量后面跟$$

if逻辑语句

在systemtap中支持逻辑if语句格式为:

if (expr) {
语句
}

逻辑语句支持以下比较
==,!=,>=,>,<,<=

例子

下面例子将打印__lookup_hash中return返回dentry*里inode指向的i_ino子成员

stap -ve ‘probe kernel.function(“__lookup_hash”).return { if (return!=0) { if(return!=-2) { if (return->d_inode!=0){ printf(“return dentry:%x,dentry->d_inode->i_ino:%x”,return,$return->d_inode->i_ino)}}}}’ -o zxy.txt

这一例子中-o zxy.txt的意思就是将结果写入文件zxy.txt中(默认输出到控制台)

目录
打赏
0
0
0
0
2
分享
相关文章
Red Hat Subscription 开发者订阅与激活订阅
使用命令时会出现以提示,命令不可正常使用。 根据提示信息,我们可以知道,需要通过Red Hat Subscription,开发者订阅。 进入开发者页面 https://developers.redhat.com/products/rhel/download,下滑看到No-cost RHEL for developers subscription 面向开发人员的免费 RHEL 订阅,选择Activate your subscription 激活你的订阅;
2622 1
IO神器blktrace使用介绍
## 前言 1. blktrace的作者正是block io的maintainer,开发此工具,可以更好的追踪IO的过程。 2. blktrace 结合btt可以统计一个IO是在调度队列停留的时间长,还是在硬件上消耗的时间长,利用这个工具可以协助分析和优化问题。 ## blktrace的原理 一个I/O请求的处理过程,可以梳理为这样一张简单的图: ![](http://image
19036 0
MCP+Hologres+LLM搭建数据分析Agent
本文探讨了LLM大模型在数据分析领域的挑战,并介绍了Hologres结合MCP协议和LLM搭建数据分析Agent的解决方案。传统LLM存在实时数据接入能力不足、上下文记忆短等问题,而Hologres通过高性能数据分析能力和湖仓一体支持,解决了这些痛点。MCP协议标准化了LLM与外部系统的连接,提升集成效率。文中详细描述了如何配置Hologres MCP Server与Claude Desktop集成,并通过TPC-H样例数据展示了分析流程和效果。最后总结指出,该方案显著提高了复杂分析任务的实时性和准确性,为智能决策提供支持。
AI在电子商务中的个性化推荐系统:驱动用户体验升级
AI在电子商务中的个性化推荐系统:驱动用户体验升级
1066 17
【MongoDB 专栏】MongoDB 的复制集:高可用性配置
【5月更文挑战第10天】MongoDB的复制集是实现数据高可用性的重要机制,由主节点和次节点构成,主节点处理写操作,次节点同步数据确保一致。在主节点故障时,次节点自动提升接替,保证服务不间断。通过复制集,可实现数据保护、持续服务,适用于关键业务系统和数据备份。配置时需关注网络稳定性、节点性能和数据一致性。案例显示,复制集能有效保障服务高可用,防止数据丢失和业务中断,是现代数据库管理的关键工具。在数据驱动的世界,复制集为高可用性提供了坚实保障。
192 0
【MongoDB 专栏】MongoDB 的复制集:高可用性配置
如何恢复硬盘删除的数据?10个简单实用方法详解
本文介绍了如何恢复硬盘删除的数据,包括删除文件恢复的基本原理和降低恢复可能性的情况,如新数据覆盖、硬盘损坏等。文中列举了10种恢复方法,如使用Ctrl + Z、查看隐藏文件、从回收站还原、利用文件历史、备份还原、网盘下载、数据恢复软件以及专业数据恢复服务等。每种方法都有详细的操作步骤,并附有注意事项。
932.【docker】解决目录挂载无效
932.【docker】解决目录挂载无效
255 2
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问