1. 磁盘I/O

1.1.1. ./disk/bitesize

使用perf命令跟踪 block:block_rq_issue 统计一段时间内(直到Ctrl+C终止)磁盘I/O操作的数据块大小的分布情况。

 ./bitesize 
            Kbytes         : I/O      Distribution
              -> 0.9       : 4        |######################################|
          1.0 -> 7.9       : 4        |######################################|
          8.0 -> 63.9      : 3        |#############################         |
         64.0 -> 127.9     : 0        |                 

1.1.2. iosnoop

使用ftrace 跟踪当前进行磁盘I/O操作的进程,同时显示每次I/O的延迟。

./iosnoop 
COMM         PID    TYPE DEV      BLOCK        BYTES     LATms
jbd2/sda3-47 4773   WS   8,0      46099672     24576      5.57
ksoftirqd/5  83     WS   8,0      46099720     4096       5.90

1.1.3. iolatency

使用ftrace 动态显示一段时间内(默认3秒),I/O延迟(ms)的分布统计。

/iolatency 
  >=(ms) .. <(ms)   : I/O      |Distribution           
       4 -> 8       : 0        |                                      |
       8 -> 16      : 1        |#######                               |
      16 -> 32      : 2        |#############                         |
      32 -> 64      : 6        |######################################|
      64 -> 128     : 5        |################################      |
^C

1.1.4. cachestat

统计间隔时间内buff/cacche的命中率 如果没有命中就会产生磁盘IO

./cachestat 
    HITS   MISSES  DIRTIES    RATIO   BUFFERS_MB   CACHE_MB
     754        0        0   100.0%          580       3162

2. 系统调用

2.1.1. syscount

使用perf 统计系统进程被调用的次数

 ./syscount 
sshd                   12
sap1002              2813
ps                   3032

2.1.2. execsnoop

监控exec()系统调用,输出进程PID和命令以及参数。 fork()->exec()

./execsnoop
   PID   PPID ARGS
 11711  11707 gawk -v o=1 -v opt_name=0 -v name= -v opt_duration=0 [...]

2.1.3. opensnoop

监控open()系统调用,输出进程PID和正在打开的文件,如果文件打开失败FD显示-1或error

 ./opensnoop 
COMM             PID      FD FILE
opensnoop        11933   0x4 
opensnoop        11938   0x4 /proc/11938/stat
opensnoop        11938   0x4 /proc/11936/cmdlin

2.1.4. killsnoop

监控kill()系统调用,输出进程名称和signal信号

./killsnoop 
COMM             PID    TPID     SIGNAL     RETURN
bash             30193  30193    2          0   

3. 内核调用

3.1.1. kprobe

跟踪某一个内核函数调用,以及显示调用它的系统进程

./kprobe p:do_sys_open
   kprobe-10642 [013] d... 52995681.250594: do_sys_open: (do_sys_open+0x0/0x1c0)

3.1.2. tpoint

跟踪某一个内核调用,以及显示调用它的系统进程

 ./tpoint  -l
block:block_bio_backmerge
block:block_bio_bounce
block:block_bio_complete

 ./tpoint  timer:timer_start
     kworker/4:0-23690 [004] d... 52995533.193218: timer_start: timer=ffff88103fc0f9a8 function=delayed_work_timer_fn expires=17543326029 [timeout=3]

3.1.3. perl-stat-hist

统计内核调用参数值大小的分布

 ./perf-stat-hist syscalls:sys_enter_read count 5

            Range          : Count    Distribution
              -> -1        : 0        |                                      |
            0 -> 0         : 0        |                                      |
            1 -> 3         : 0        |                                      |
            4 -> 15        : 0        |                                      |
           16 -> 63        : 71       |#####                                 |
           64 -> 255       : 2        |#                                     |
          256 -> 1023      : 35       |###             

4. 内核函数

4.1.1. functrace

跟踪指定的内核函数调用,可用正则匹配

./functrace  'tcp*'
sshd-5750  [002] .... 52994327.229384: tcp_md5_do_lookup <-tcp_v4_md5_lookup

4.1.2. funccount

正则匹配统计内核函数调用次数 类似syscount统计进程调用次数

./funccount -t 1 '*'
idle_cpu            796980

4.1.3. funcslower

统计内核函数调用时间超过指定阀值的调用

./funcslower -a vfs_read 10000
#     TIME        CPU  TASK/PID         DURATION                  FUNCTION CALLS
52994644.045459 |    6)    wc-6777     | ! 17657.34 us |  } /* vfs_read */

4.1.4. funcgraph

跟踪一个内核函数调用,显示他调用的所有子函数

 ./funcgraph vfs_read
  3)               |  vfs_read() {
  3)   0.097 us    |    rw_verify_area();
  3)               |    tty_read() {
  3)   0.080 us    |      tty_paranoia_check();
  3)               |      tty_ldisc_ref_wait() {
  3)               |        tty_ldisc_try() {
  3)   0.084 us    |          _raw_spin_lock_irqsave();
  3)   0.080 us    |          _raw_spin_unlock_irqrestore();

5. 其他

5.1.1. tool/reset-ftrace

由于使用ftrace的工具没有正常退出(例如被kill -9杀死),导致ftrace的lock文件没有正常删除和一些配置没能重置。下次使用ftrace时就会出错,这时就是需要tool/reset-ftrace来删除lock文件和重置ftrace配置。

5.1.2. ./user/uprobe

需要内核版本大于3.13才能使用

5.1.3. tcpretrans

监控网络TCP转发状态

Copyright © 温玉 2021 | 浙ICP备2020032454号 all right reserved,powered by Gitbook该文件修订时间: 2023-06-19 08:59:50

results matching ""

    No results matching ""