systemptap系列之用户空间探针
起初systemtap 是聚焦于内核空间的,因为用户层的诊断工具真的很多,后来还是在0.6版本时候可以探测用户进程了,既然可以用,那就用它吧。
Systemtap用uprobes 模块来执行用户层的探测,在内核3.5以后,已经包含了,可以查看内核的config文件中CONFIG_UPROBES参数。
1. 用户层事件
用户事件可以通过PID来限定,也可以通过可执行路径来限定。
有些事件限制了必须使用一个特定的PATH,因为需要debug信息来静态分析将探针放在哪里。
例如:
process(“PATH”).function(“function”),用户空间函数入口。类似内核函数的kernel.function(“function”)。
process(“PATH”).statement(“statement”),类似kernel.statement(“statement”).
process(“PATH”).mark(“marker”),静态点marker定义在PATH .很多应用提供静态探针.例如java的hotspot JVM.
probe hotspot.gc_begin =
process("/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/libjvm.so").mark("gc__begin")
process.begin,用户进程开始创建
process.thread.begin,用户线程创建
process.end用户进程结束
process.thread.end用户线程结束
process.syscall用户进程使用系统调用。
2. 访问目标变量
对于每个函数,第一个参数是指向数据的
user_char(address) ,包含当前用户进程中地址的字节。此外还有如下,分别是短整型,整型,长整型,字符串。
user_short, user_int, user_long, user_string, user_string_n
3. 用户空间堆栈
探针指针probe point(pp)可以显示是那个事件触发了事件句柄。
但是共享库函数经常被程序不同模块激活,所以函数堆栈就可以看到事件是如何被触发的。
用户层堆栈,通过调试信息段来实现的,不过对于可执行程序需要使用-d executable参数,共享库需要-ldd参数。
例如:
#stap -d /bin/ls --ldd -e 'probe process("ls").function("xmalloc") {print_usyms(ubacktrace())}' -c "ls /"

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Java集合框架源码解析之LinkedHashSet
阅读本节内容需要读者对 HashMap 、HashSet 和 LinkedHashMap 的源码有所了解,因为 LinkedHashSet 的内部实现都是来自于这三个容器类,其内部源码十分简单,简单到它只有一个成员变量、四个构造函数、一个 Set 接口的方法 如果你想多了解下这三个容器类,可以从这里获得:Java集合框架源码解析 LinkedHashSet 的所有源码如下所示 package java.util; public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, java.io.Serializable { //序列化ID private static final long serialVersionUID = -2851667679971038690L; //自定义初始容量与装载因子 public LinkedHashSet(int initialCapacity, float loadFactor) { super(initialCapac...
-
下一篇
爬虫入门之爬虫概述与urllib库(一)
1 爬虫概述 (1)互联网爬虫 一个程序,根据Url进行爬取网页,获取有用信息 (2)核心任务 爬取网页 解析数据 难点 :爬虫和反爬虫之间的博弈 (3)爬虫语言 php 多进程和多线程支持不好 java 目前java爬虫需求岗位旺盛,但代码臃肿,重构成本高,而爬虫需要经常修改,所以不好用 C\C++ 学习成本比较高,性能和效率高,停留在研究层面,市场需求量小。体现程序员能力。 python 语法简洁优美、对新手友好学习成本低、支持的模块非常多、有scrapy非常强大的爬虫框架 (4)爬虫分类 #通用爬虫 实例 百度、360、google、sougou等搜索引擎, 将网上的数据进行爬取并进行排名展示 功能 访问网页->抓取数据->数据存储->数据处理->提供检索服务 抓取流程 1. 给定一些起始的URL,放入待爬取队列 2. 从队列中获取url对象,开始爬取数据 3. 分析网页,获取网页内的所有url,入队,继续重复执行第二步 搜索引擎如何获取新网站链接 1. 主动给搜索引擎提交url 2. 在其他网站中设置友情链接 3. 百度和DNS服务商合作,只要有域名,就...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装Nodejs环境
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL数据库在高并发下的优化方案
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果