LTTng 简介使用实战

一、LTTng简介

      LTTng: (Linux Trace Toolkit Next Generation),它是用于跟踪 Linux 内核、应用程序以及库的系统软件包。LTTng 主要由内核模块和动态链接库(用于应用程序和动态链接库的跟踪)组成。它由一个会话守护进程控制,该守护进程接受来自命令行接口的命令。babeltrace 项目允许将追踪信息翻译成用户可读的日志,并提供一个读追踪库,即 libbabletrace。


        LTTng 不仅使用了 Linux 内核中的追踪点(tracepoint)手段,而且可以使用其他各种信息来源,比如kprobes 和 Perf(Linux 中的性能监检测工具)。这对于调试大范围内的bug 是非常有用的,否则这种调试工作将极具挑战性。比如,包括并行系统和实时系统中的性能问题。另外,用户自己定制的工具也可以加入到其中。LTTng 的设计目标是将性能影响最小化,而且在没有跟踪的情况下,对系统的影响应该几乎为零。


        LTTng如今已支持多个发行版(Ubuntu/Dibian、Fedora、OpenSUSE、Arch etc.)和多种架构(x86 and x86-64 、ARM 、PowerPC, Sparc, Mips etc.),此外官方还说支持Android和FreeBSD系统。

更多相关知识参见: 《使用LTTng链接内核和用户空间应用程序追踪

 

二、LTTng使用实战 -- 安装

2.0 LTTng需要的内核配置(通过读取LTTng-module文档中的README了解)


必选配置: 

CONFIG_MODULES   内核模块支持
CONFIG_KALLSYMS   查看wrapper/ 文件。 
CONFIG_HIGH_RES_TIMERS  高精度时钟,LTTng2.0的时钟源 
CONFIG_TRACEPOINTS  内核追踪点


可选配置(下面的内核配置会影响LTTng的特性):

CONFIG_HAVE_SYSCALL_TRACEPOINTS:  
            系统调用追踪:
               lttng enable-event -k --syscall
               lttng enable-event -k -a
CONFIG_PERF_EVENTS:             lttng add-context -t perf:*
CONFIG_EVENT_TRACING:
            事件追踪,块层的追踪
CONFIG_KPROBES                      lttng enable-event -k --probe ...
CONFIG_KRETPROBES               lttng enable-event -k --function ...


2.1  Ubuntu  :

从Ubuntu 12.04开始,LTTng的包可以直接从包管理器的仓库里找到,所以安装变得非常简单:
                 sudo apt-get install lttng-tools
对于其他版本,需要添加PPA才能使用包管理器安装(https://launchpad.net/~lttng/+archive/ppa):
                $ sudo apt-add-repository ppa:lttng/ppa
                $ sudo apt-get update
                $ sudo apt-get install lttng-tools lttng-modules-dkms babeltrace


2.2 Fedora:

从 Fedora 17开始, UST 和工具包也可以使用yum直接安装:
                $ sudo yum install lttng-tools
但是你需要手动的编译lttng模块。(从官网下载一个lttng-modules-***.tar.bz2)
# tar xvf lttng-modules-2.3.2.tar.bz2 
# cd lttng-modules-2.3.2
# vim README --- > 通过读README学习如何安装
# make
# make modules_install
# depmod -a

2.3 OpenSUSE(或者其他的使用rpm包的Linux发行版)的RPM包:

https://build.opensuse.org/project/show?project=devel%3Atools%3Alttng


2.4 Arch Linux:

https://aur.archlinux.org/packages.php?O=0&K=lttng&do_Search=Go

 

三、LTTng使用实战 -- 内核追踪

 

首先我们得确认你是否已经安装了lttng-modules 和lttng-tools。

 

3.1  内核追踪

列出所有的可追踪内核事件:
# lttng list -k
Kernel events:
-------------
     timer_init (loglevel: TRACE_EMERG (0)) (type: tracepoint)
     timer_start (loglevel: TRACE_EMERG (0)) (type: tracepoint)
     timer_expire_entry (loglevel: TRACE_EMERG (0)) (type: tracepoint)
 ……


3.2 创建一个追踪会话(session),这个命令会创建一个目录用以存放追踪结果:

 

                 # lttng create mysession
                Session mysession created.
                Traces will be written in /home/dslab/lttng-traces/mysession-20131010-145153

假如你当前已经有了很多的会话,我们可以设置当前追踪会话:

# lttng set-session myothersession
Session set to myothersession

3.3 创建追踪规则(探测点/系统调用 etc.)

1) 追踪内核所有的探测点和所有的系统调用事件(-k/--kernel)
# lttng enable-event -a -k

2) 
追踪探测点事件,这里我们追踪 sched_switch和sched_wakeup为例 (-k/--kernel) 。

 

# lttng enable-event sched_switch,sched_wakeup -k
或者追踪所有的探测点事件:
# lttng enable-event -a -k --tracepoint

3) 追踪所有的系统调用:
# lttng enable-event -a -k --syscall


4) 使用 kprobes 以及 (或) 其他追踪器作为lttng的源:
这是一个LTTng2.0内核追踪器的一个新特性,你可以使用一个动态probe作为源,probe的追踪结果会显示在lttng的追踪结果中

# lttng enable-event aname -k --probe symbol+0x0
or
# lttng enable-event aname -k --probe 0xffff7260695
可以为probe制定一个准确的地址0xffff7260695或者 symbol+offset。

你也可以使用功能追踪(使用的Ftrace API),追踪结果也会显示在lttng的追踪结果中:

# lttng enable-event aname -k --function <symbol_name>


5) 打开一个事件的上下文信息:
这也是一个新特性,可以让你添加一个事件的上下文信息。比如说你可以添加PID:

# lttng add-context -k -e sched_switch -t pid
你也可以使用多个上下文信息:
lttng add-context -k -e sched_switch -t pid -t nice -t tid

你可以使用' lttng add-context --help ' 学习所有的上下文格式的用法。

6) 打开事件的Perf计数器: 
这也是一个新的很强大的特性,为每个追踪的事件添加Perf计数器数据(使用Perf的API)。下面实例为为每个事件添加CPU周期:
# lttng add-context -k -e sched_switch -t perf:cpu-cycles

注: 你需要使用 add-context 的help学习所有的perf计数器值的含义。

3.4 开始追踪:

# lttng start

追踪结果会写到上面创建会话时创建的文件夹中。比如上面的 :/home/dslab/lttng-traces/mysession-20131010-145153

注意:这个命令会打开所有的追踪,如果你想同时追踪用户空间和内核空间,你在使用这个之前需要设置好所有的追踪规则。

3.5 停止追踪:

# lttng stop

注:在这时候,你可一使用 lttng start 重新追踪,也可以打开/关闭某个事件或者隔段时间再来追踪。当然你也可以查看追踪信息。

 


3.6 关闭追踪(你的追踪工作已经结束)

# lttng destroy 

 


四、LTTng使用实战 -- 用户空间追踪

待以后添加。

 

五、LTTng使用实战 -- 追踪数据分析

5.1 分析工具 -- babeltrace

 

babeltrace是lttng tools中自带的分析工具,很强大。我们可以直接使用babeltrace打开追踪数据,比如上面提到的 /home/dslab/lttng-traces/mysession-20131010-145153。

我们先查看下这个追踪结果下的结构:

# tree /home/dslab/lttng-traces/mysession-20131010-145153

 

/home/dslab/lttng-traces/mysession-20131010-145153

└── kernel

    ├── channel0_0
    ├── channel0_1
    ├── channel0_2
    ├── channel0_3
    └── metadata

可以看出来追踪目录下只有一个目录,叫做kernel,所以……如果追踪前也打开了用户追踪,那么这里面还会多个追踪目录(用户空间的)。kernel目录下分几个文件保存追踪数据。但是我们使用babeltrace查看追踪结果时不能指定到具体的文件,需要指定到kernel。

# babeltrace /home/dslab/lttng-traces/mysession-20131010-145153

[13:09:27.585271256] (+?.?????????) Raring-Ringtail sys_geteuid: { cpu_id = 2 }, { }
[13:09:27.585273674] (+0.000002418) Raring-Ringtail exit_syscall: { cpu_id = 2 }, { ret = 0 }
[13:09:27.585275886] (+0.000002212) Raring-Ringtail sys_pipe: { cpu_id = 2 }, { fildes = 0xB6588B84 }
[13:09:27.585283170] (+0.000007284) Raring-Ringtail exit_syscall: { cpu_id = 2 }, { ret = 0 }
……

如果我们将babeltrace的输出信息输出到一个文件中,比如# babeltrace /home/dslab/lttng-traces/mysession-20131010-145153 > /tmp/trace 。我们就可以使用shell脚本获取/tmp/trace中的追踪数据并进一步分析。


 



转载于:https://www.cnblogs.com/suncoolcat/p/3366045.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑马程序员-------------(十)Java基础知识加强(一)

JDK1.5新特性 目录1.之前已经学习过的JDK1.5新特性2.静态导入 StaticImport3.可变参数 ...4.高级for循环5.枚举6.泛型 Generic7.注解注&#xff1a;本章全部为重点内容。###################################################################################################…

java例子:数组 数3退1

500个人围成一个圈子&#xff0c;数够3人&#xff0c;就退出1个&#xff0c;问最后剩下的是几号&#xff1f;检验先有5个人&#xff0c;应该留下第4个人&#xff0c;由于是数组&#xff0c;所以第四个人的下标是3. /*achieve the funtion :count 3 kids, the quit the third k…

Android版CCLabelTTF在setstring时出现黑块

首先有个前提知识&#xff0c;cocos2dx里&#xff0c;只能在ui线程&#xff08;通常也就是主线程&#xff09;中进行渲染工作&#xff08;貌似现在有一些引擎是支持多线程渲染的&#xff0c;没有深入研究&#xff09;&#xff0c;否则大约会因为多个线程同时给GPU发指令而出现问…

java例子:九九乘法表

来吧直接上代码&#xff1a;public class Test{public static void main(String[] args) {for(int i 1; i<9;i){for (int j 1; j < i ;j ) {System.out.print(j"x"i""j*i" ");}System.out.print("\n");}} }运行之后&#xff1…

Apache的RewriteRule规则详细介绍

R[code](force redirect) 强制外部重定向 (rkyW z强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定&#xff0c;将用缺省的302 HTTP状态码。 gN24M 3{CF(force URL to be forbidden)禁用URL,返回403HTTP状态码。 m> 4ahue$G(force URL…

算法:查找

查找算法&#xff08;比较&#xff09;基本思想顺序查找顺序查找也称为线形查找&#xff0c;属于无序查找算法。从数据结构线形表的一端开始&#xff0c;顺序扫描&#xff0c;依次将扫描到的结点关键字与给定值k相比较&#xff0c;若相等则表示查找成功&#xff1b;若扫描结束仍…

query上传插件uploadify参数详细分析

query上传插件uploadify参数详细分析 Uploadify Version 3.2 官网&#xff1a;http://www.uploadify.com/ 注&#xff1a;文件包里有两个js分别是&#xff1a;jquery.uploadify.js 和 jquery.uploadify.min.js&#xff0c;两者其实一样&#xff0c;只需载入其中一个js即可。很明…

python 基础 list和 tuple dict和set

list Python内置的一种数据类型是列表&#xff1a;list。list是一种有序的集合&#xff0c;可以随时添加和删除其中的元素。classmates [Michael, Bob, Tracy] 要删除list末尾的元素&#xff0c;用pop()方法&#xff1a; 要删除指定位置的元素&#xff0c;用pop(i)方法&#x…

IIS的安装

xp上好像只能装IIS5&#xff0c;IIS6根本就装不了转载于:https://www.cnblogs.com/hyk110988/p/3372592.html

py四种时间格式

time有四种类型&#xff08;time, datetime, string, timestamp&#xff09;1. time stringstring是最简单的表示time的方式如如下代码生成的即为string123>>> import time>>> time.ctime()Wed Nov 30 13:53:31 2016或者更简单的生成一个字符串1time_string …

type_traits应用

工作遇到这样的例子&#xff0c;对不同数据进行计算处理&#xff0c;得到一组结果集&#xff0c;包括计数、比例等。各个计算处理过程不同&#xff0c;结果集数据结构相同&#xff0c;但并非所有计算过程均有计数、比例的结果&#xff0c;有些可能只有计数&#xff0c;有些只有…

csv.writer写入文件有多余的空行

在用csv.writer写入文件的时候发现中间有多余的空行。 最早打开方式只是‘w’&#xff0c;会出现多余的空行&#xff0c;网上建议使用binary形式‘wb’打开可以解决问题&#xff1a; with open(egg2.csv, wb) as cf:12 不过只能在python2下运行&#xff0c;python3报错&#xf…

java笔记之连接数据库

1、一定不要忘了导入包 java工程&#xff1a;lib文件夹下mysql-connector-java.jar--->Build Path Web工程:当web下的servlet需要连接数据库时&#xff0c;除了上一步导入包还要在WEB-INF/lib导入mysql-connector-java.jar 2、关于乱码&#xff0c;查询 在终端查询数据时&am…

那些不能错过的XCode插件

XCode颜色显示插件ColorSense代码里的那些冷冰冰的颜色数值&#xff0c;到底时什么颜色&#xff1f;如果你经常遇到这个问题&#xff0c;每每不得不运行下模拟器去看看&#xff0c;那么这个插件绝对不容错过。更彪悍的是你甚至可以点击显示的颜色面板&#xff0c;直接通过系统的…

python爬虫第一课 开发环境配置

一、Python3的安装 二、请求库的安装 1、requests的安装 直接pip安装&#xff1a;pip3 install requests 2、Selenium的安装 selenium是一个自动测试化工具&#xff0c;利用它我们可以驱动浏览器执行特定的动作&#xff0c;如点击、下拉等操作。 直接pip安装&#xff1a;pip in…

用JSLint精炼提升JavaScript代码

由于移动应用的盛行和HTML5的广泛运用&#xff0c;JavaScript正越来越流行。JavaScript受欢迎的部分原因是因为它的灵活便捷&#xff0c;你可以快速上手&#xff0c;它不需要重量级的开发环境&#xff0c;也不需要第三方应用支持&#xff0c;只要你打开一个文本编辑器&#xff…

pymssql出现的错误

安装pymssql出现的错误&#xff1a;如下&#xff1a;---------------------------------------- Failed building wheel for pymssqlRunning setup.py clean for pymssql Failed to build pymssql Installing collected packages: pymssqlRunning setup.py install for pymssq…

javascript设计思维

//一.把参数当作私有变量使用 (function (a, b) {//把参数当作私有变量使用&#xff0c;省略了var&#xff0c;也节省了行数console.log(b) //undefined&#xff0c;所有未赋值的变量均为undefined })(window);//二.把参数作为参数使用 var obj_init function (b, d, f) {//1…

linux第一章简答

linux第一章简答题&#xff1a; 1、你在你的主机上面安装了一张网卡&#xff0c;但是开机之后&#xff0c;系统却无法使用&#xff0c;你确定网卡是好的&#xff0c;那么可能的问题出在哪里&#xff1f;该如何解决&#xff1f; 答&#xff1a;因为所有的硬件都没有问题&#xf…

(原创)一个和c#中LazyT类似的c++ LazyT类的实现

在.net 4.0中增加一个延迟加载类Lazy<T>&#xff0c;它的作用是实现按需延迟加载&#xff0c;也许很多人用过。一个典型的应用场景是这样的&#xff1a;当初始化某个对象时&#xff0c;该对象引用了一个大对象&#xff0c;需要创建&#xff0c;这个对象的创建时需要较长的…