systemtap基礎入門
stap指令碼最終會被解析成c語言並以核心模組的形式載入;
可執行於root使用者,也可建立stapdev/stapusr使用者組,執行非root使用者執行systemtap;
Stapdev:其下使用者可執行systemtap指令碼,也可使用staprun執行SystemTap指令模組
Stapusr:其下使用者只能使用staprun執行SystemTap指令模組
變數
數值型別long -- 64位unsigned integer
字串
關聯陣列--
索引項可以是long或string;value值可以是統計資料;
遍歷陣列
foreach( x in foo)--x為索引項
foreach([s,x] in foo- limit 10)--只取前10個
刪除陣列 delete arr
刪除陣列某個元素 delete arr[tid()]
統計資料--用於聚集操作,只支援<<<運算子,支援聚集函式@count()/@sum()/@min()/@max(),還支援圖形顯示hist_linear()/hist_log()
支援C語言的語法結構,包括if else/for(,,,)/while(expr)/do {} while(exp)
指令碼引數
$1..$N用於數字引數;@1..@N字串引數;$#/@#引數個數
systemtap指令碼分為2部分: probe函式和自定義函式
begin--指令碼開始時執行
end--指令碼結束時執行
error--因錯誤終結時執行
probe函式主要型別如下
timer
類似定時器,即定時呼叫該探針,例如timer.s(10)每10秒執行一次
除了秒,還支援jiffies/ms/us/ns,而timer.profile則每個system tick執行一次;
核心函式
使用kprobes和kretprobes,
其語法為
kernel.function("FUNC@FILE:LINE")
或
module("NAME").function("FUNC@FILE:LINE")
所有呼叫該函式的行為都能被探測,其中@FILE和:LINE為可選項;
還支援字尾:.call--預設,探測non-inlined函式;.inline--探測inlined函式;.return,探測non-inlined函式的返回
tapsets
為自帶函式庫,提供一些預定義函式,位於/usr/share/systemtap/tapset,此目錄在elaboration階段會被掃描,也可-I指定其他目錄;
syscall.* --探測每個system call,包括name和argstr
內建函式
systemtap還有很多內建函式
上下文相關
cpu()--執行當前程式的CPU number
execname()--返回當前執行的程式名
tid()
pid()--當前程式的ID
uid()--當前程式的user id
stp_pid()
backtrace()
pp()
thread_indent()--
probefunc()--返回被探測的函式名
probemod()
字串相關
strlen()/substr()/isinstr()/strtol()
時間相關
get_cycles()
gettimeofday_s()
gettimeofday_ns()
限制
經過解析的指令碼需執行於核心空間,而核心棧空間有限;
為核心棧避免溢位和節省系統資源,會有以下限制:
遞迴呼叫的深度
陣列大小--所有陣列都是預分配的,如果太長則會丟擲錯誤
執行時間--自動檢測無限迴圈操作並終結,如while(1) {...}
其它諸如除0操作也會被及時檢測
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-757901/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- RabbitMQ基礎入門MQ
- mongodb基礎入門MongoDB
- MySQL 基礎入門MySql
- ZooKeeper 基礎入門
- Elasticsearch 基礎入門Elasticsearch
- Vim 入門:基礎
- Bootstrap基礎入門boot
- Html基礎入門HTML
- ElasticSearch基礎入門Elasticsearch
- HTML 基礎入門HTML
- Dart 基礎入門Dart
- SQL入門基礎SQL
- Nginx 基礎入門Nginx
- Kafka基礎入門Kafka
- Redis入門基礎Redis
- Java 入門基礎Java
- Maven入門基礎Maven
- JavaScript入門基礎JavaScript
- SQL基礎入門SQL
- Zookeeper基礎入門
- goalng 基礎入門Go
- TypeScript 基礎入門TypeScript
- Mongoose基礎入門Go
- sqlServer 基礎入門SQLServer
- 【FastAPI】入門基礎ASTAPI
- shell入門基礎
- go基礎入門Go
- 前端基礎入門四(JavaScript基礎)前端JavaScript
- React Hooks入門: 基礎ReactHook
- Docker | 入門 & 基礎操作Docker
- 圖論入門基礎圖論
- TypeScript 基礎入門(一)TypeScript
- Git入門-基礎命令Git
- HTML入門基礎(二)HTML
- rabbitmq(一)-基礎入門MQ
- Elasticsearch(1):基礎入門Elasticsearch
- TypeScript 之基礎入門TypeScript
- Kafka基礎入門篇Kafka