LTTng 簡介 使用實戰

2021-09-09 05:11:13 字數 4464 閱讀 9931

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鏈結核心和使用者空間應用程式追蹤》

從ubuntu 12.04開始,lttng的包可以直接從包管理器的倉庫裡找到,所以安裝變得非常簡單:

sudo apt-get install lttng-tools

對於其他版本,需要新增ppa才能使用包管理器安裝(

$ sudo apt-add-repository ppa:lttng/ppa

$ sudo apt-get update

$ sudo apt-get install lttng-tools lttng-modules-dkms babeltrace

從 fedora 17開始, ust 和工具包也可以使用yum直接安裝:

$ sudo yum install lttng-tools

# tar xvf lttng-modules-2.3.2.tar.bz2 

# cd lttng-modules-2.3.2

# vim readme --- > 通過讀readme學習如何安裝

# make

# make modules_install

# depmod -a

首先我們得確認你是否已經安裝了

lttng-modules 和lttng-tools。

列出所有的可追蹤核心事件:

#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)

……# 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

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

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計數器值的含義。

# lttng start

追蹤結果會寫到上面建立會話時建立的資料夾中。比如上面的 :/home/dslab/lttng-traces/mysession-20131010-145153

注意:這個命令會開啟所有的追蹤,如果你想同時追蹤使用者空間和核心空間,你在使用這個之前需要設定好所有的追蹤規則。

# lttng stop

注:在這時候,你可一使用

lttng start 重新追蹤,也可以開啟/關閉某個事件或者隔段時間再來追蹤。當然你也可以檢視追蹤資訊。

# lttng destroy 

待以後新增。

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: ,

[13:09:27.585273674] (+0.000002418) raring-ringtail exit_syscall: ,

[13:09:27.585275886] (+0.000002212) raring-ringtail sys_pipe: ,

[13:09:27.585283170] (+0.000007284) raring-ringtail exit_syscall: , ……

如果我們將babeltrace的輸出資訊輸出到乙個檔案中,比如#

babeltrace 

/home/dslab/lttng-traces/mysession-20131010-145153 > /tmp/trace 。我們就可以使用shell指令碼獲取/tmp/trace中的追蹤資料並進一步分析。

React框架Umi實戰 1 簡介與使用腳手架

之前寫完了dva入門系列,它只是乙個純粹的資料流框架,拿來開發是沒有問題的.但是還是有一些繁瑣的步驟,每次要手動註冊model,手寫route路由.umi的出現結合dva,使得開發更加的優雅與便捷.開箱即用,內建 react react router 等 類 next.js 且功能完備的路由約定,同...

React框架Umi實戰 1 簡介與使用腳手架

之前寫完了dva入門系列,它只是乙個純粹的資料流框架,拿來開發是沒有問題的.但是還是有一些繁瑣的步驟,每次要手動註冊model,手寫route路由.umi的出現結合dva,使得開發更加的優雅與便捷.1.安裝umi npm install g umi 複製 2.檢查 umi v 複製 3.安裝腳手架 ...

Docker容器實戰 簡介 安裝

docker容器實戰相關博文,是我對 docker容器實戰 原理 架構與應用 的學習筆記,特此宣告 雲計算將基礎設施作為動態 可自適應的資源提供給企業,解決了企業應用靈活性和響應性問題,改變了對 機器 的管理模式,但並未從本質上改變管理的物件。但是借助容器,使用者可以真正擺脫對伺服器和作業系統的依賴...