鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

单独工具压缩包使用方式

可通过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
表1 解压后文件说明

文件

说明

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

简单的使用说明。

使用方式

  1. 将工具链路时延检测工具压缩包上传至服务器对应目录(以“/home/”为例)。
  2. 解压工具压缩包。
    1
    2
    tar -zxvf tracelib-collector-xxx.tar.gz
    cd tracelib-collector-xxx
    
  3. 使用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)

  4. 配置环境变量并启动应用。

    librecord.so依赖同一目录下的libglib-2.0.so和libgobject-2.0.so,因此需要额外指定LD_LIBRARY_PATH。

    1
    LD_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:表示不打印日志。
  5. 查看采集数据。

    工具都会为每个执行了目标函数的线程生成一个独立的数据文件,对应文件名为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”起始的数据行,这些是函数的调用信息,时间戳和耗时单位都是纳秒,格式为:
      1
       0 <函数名> <进入时间戳> <离开时间戳> <函数耗时> [<返回值> <参数个数> <参数1> <参数2> ...]
      
    • “1”和“2”起始的数据行记录进/线程的创建信息,格式分别为:
      1
      1 <时间戳> <进程号pid> <进程组号pgid> <线程号tid> <线程组号tgid> <父进程号ppid> 
      
      1
      2 <时间戳> <当前线程tid> <父线程tid>
      
    • 如果采集的是主线程,还会包含“3”起始的数据行,该数据是在进程起止时刻通过getrusage获取的,单位为纳秒,格式为:
      1
      3 <进程的用户态CPU耗时>
      
  6. 分析采集数据。
    对于生成的数据文件,可以使用配套的简易分析工具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

    -

    指定统计结果的符号名。