单独工具压缩包使用方式
可通过LD_PRELOAD环境变量,让应用在启动时首先加载采集库librecord.so,通过动态库采集运行时的POSIX函数及参数信息,此方式也称为启动时加载(Launch Mode)。
前提条件
已在获取工具包获取链路时延检测工具压缩包(tracelib-collector-aarch64.tar.gz或tracelib-collector-x86_64.tar.gz)。
工具包简介
根据服务器类型选择链路时延检测工具压缩包(tracelib-collector-xxx.tar.gz),tracelib-collector-xxx.tar.gz解压后内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | tracelib-collector-xxx/ ├── analyze ├── Software License Agreement.txt ├── libglib-2.0.so -> libglib-2.0.so.0 ├── libglib-2.0.so.0 -> libglib-2.0.so.0.7500.0 ├── libglib-2.0.so.0.7500.0 ├── libgobject-2.0.so -> libgobject-2.0.so.0 ├── libgobject-2.0.so.0 -> libgobject-2.0.so.0.7500.0 ├── libgobject-2.0.so.0.7500.0 ├── librecord.so -> librecord.so.25 ├── librecord.so.25 -> librecord.so.25.2.0 ├── librecord.so.25.2.0 ├── README.md ├── symbol └── 软件许可协议.txt |
文件 |
说明 |
|---|---|
librecord.so |
需要加载的采集库,librecord.so依赖同一目录下的libglib-2.0.so和libgobject-2.0.so。 |
libgobject-2.0.so |
librecord.so的依赖库。 |
libglib-2.0.so |
librecord.so的依赖库。 |
symbol |
可执行文件,可通过模糊匹配快速生成配置文件。 |
analyze |
可执行文件,可分析采集的数据。 |
README.md |
简单的使用说明。 |
使用方式
- 将工具链路时延检测工具压缩包上传至服务器对应目录(以“/home/”为例)。
- 解压工具压缩包。
1 2
tar -zxvf tracelib-collector-xxx.tar.gz cd tracelib-collector-xxx
- 使用symbol快速生成配置文件或自行编写配置文件。
- 使用symbol快速生成配置文件。
1./symbol /path/to/your_app -e 'Test&Symbol' -o path/to/output.conf
表2 symbol参数说明 参数
说明
-e/--expr
指定需要采集函数符号,如“Test&Symbol”表示采集所有包含Test和Symbol的符号。
-f/--file
指定待读取的文件,每一行一个函数信息。
-o/--output
指定生成的配置文件路径。
- 自行编写配置文件。
配置文件详情请参见配置文件(RECORD_CONF)。
- 使用symbol快速生成配置文件。
- 配置环境变量并启动应用。
librecord.so依赖同一目录下的libglib-2.0.so和libgobject-2.0.so,因此需要额外指定LD_LIBRARY_PATH。
1LD_LIBRARY_PATH=/directory/of/:$LD_LIBRARY_PATH LD_PRELOAD=/path/to/librecord.so RECORD_CONF=/path/to/my_app.conf /path/to/your_app [app_arguments]
- LD_LIBRARY_PATH指向librecord.so所在的目录。
- LD_PRELOAD指向采集库librecord.so。
- RECORD_CONF环境变量指向配置文件。
采集运行时的数据需指定动态库所在路径、配置环境变量以及待采集的二进制文件路径,可配置一个或多个环境变量,RECORD_CONF环境变量为必选参数,多个环境变量之间用空格隔开。
表3 参数说明 参数
说明
/path/to/your_app
必选,实际待采集的二进制文件路径。
app_arguments
二进制文件需要的参数。
表4 环境变量参数说明 环境变量名
数据类型
说明
RECORD_CONF
str
必选参数,配置文件,指定需要记录的函数的配置文件路径。
配置文件中未指定pthread_create和fork函数,在采集时也会默认采集pthread_create和fork函数。
RECORD_OUT_DIR
str
可选参数,指定数据文件的输出目录。若不指定,则在当前目录下创建文件夹(record.data)。
根据RECORD_CONF指定的配置文件采集对应的函数信息,采集到的数据会存放到RECORD_OUT_DIR指定的输出目录下,不同TID的数据存放到不同的文件里。
RECORD_VERBOSE
int
可选参数,是否需要打印日志信息,默认为0。
- 1:表示需要打印日志。
- 0:表示不打印日志。
- 查看采集数据。
工具都会为每个执行了目标函数的线程生成一个独立的数据文件,对应文件名为record.tid。
原始的数据文件记录了每一次函数调用的进入和退出的时间戳、耗时等信息,示例如下。
1 2 3 4 5 6 7
1 36149310 3081497 3081497 3081504 3081497 2740656 2 35935130 3081504 3081497 0 _Z4funcv 34587450 34714230 126780 0 bind 34739850 34746540 6690 0 3 4 P1{sin_family:2,sin_port:0,sin_addr:{s_addr:16777343}} 16 ... ... 3 1798
- 重点关注以“0”起始的数据行,这些是函数的调用信息,时间戳和耗时单位都是纳秒,格式为:
10 <函数名> <进入时间戳> <离开时间戳> <函数耗时> [<返回值> <参数个数> <参数1> <参数2> ...]
- “1”和“2”起始的数据行记录进/线程的创建信息,格式分别为:
11 <时间戳> <进程号pid> <进程组号pgid> <线程号tid> <线程组号tgid> <父进程号ppid>
12 <时间戳> <当前线程tid> <父线程tid>
- 如果采集的是主线程,还会包含“3”起始的数据行,该数据是在进程起止时刻通过getrusage获取的,单位为纳秒,格式为:
13 <进程的用户态CPU耗时>
- 重点关注以“0”起始的数据行,这些是函数的调用信息,时间戳和耗时单位都是纳秒,格式为:
- 分析采集数据。对于生成的数据文件,可以使用配套的简易分析工具analyze分析。该工具会统计TOP n函数的耗时,以及P99、P75、平均值等信息。
1./analyze record.data -m --demangle -c -o metrics
表5 analyze参数说明 参数
参数选项
说明
-o/--output_dir
-
指定统计结果的存放目录。
-n/--top_n
-
指定统计结果中显示top N的函数信息。
-s/--sort
{avg,max,min,P90,P75,P50,count}
指定结果数据展示的排序方式。默认按平均耗时降序。使用时将中括号内的值按需排序。
-c/--csv
-
指定统计结果的文件格式为csv,默认文本文件。
-m/--merge
-
指定所有数据合并为一个文件输出,默认按每个线程单独统计。
--demangle
-
指定统计结果的符号名。