当前位置:   article > 正文

性能分析与调优: Linux 文件系统观测工具

性能分析与调优: Linux 文件系统观测工具

目录

一、实验

1.环境

2.mount

3.free

4.top

5.vmstat

6.sar

7.slabtop

8.strace

9.opensnoop

10.filetop

11.cachestat

二、问题

1.Ftrace实例如何实现

2.Function trace 如何跟踪实例

3.function_graph Trace 如何跟踪实例

4.trace event 如何跟踪实例

5.未找到命令

6. fatrace有何功能


一、实验

1.环境

(1)主机

表1-1 主机

主机架构组件IP备注
prometheus

监测

系统

prometheus、node_exporter 192.168.204.18
grafana监测GUIgrafana192.168.204.19
agent 

监测

主机

node_exporter192.168.204.20

(2)文件系统观测工具

表1-2 文件系统观测工具

序号工具描述
1mount列出文件系统和它们的挂载选项
2free缓存容量统计信息
3top包括内存使用概要
4vmstat虚拟内存统计信息
5sar多种统计信息,包括历史信息
6slabtop内核slab分配器统计信息
7strace系统调用跟踪
8opensnoop跟踪打开的文件
9filetop使用中的最高IOPS和字节数的文件
10cachestat页缓存统计信息

2.mount

(1) 列出挂载的文件系统与挂载选择

[root@agent ~]# mount

3.free

(1) 显示内存和交换区的统计信息

①显示正常输出,单位为MB(-m)

[root@agent ~]# free -m

② 显示宽(-w)的输出,单位为MB(-m)。

[root@agent ~]# free -mw

输出包含一个buffers列,表示缓冲区高速缓存大小,以及一个cache列,表示页缓存大小。

4.top

(1) 输出包含文件系统缓存的详细信息

[root@agent ~]# top

输出了buff/cache和avail Mem统计信息

5.vmstat

(1) 输出包含文件系统缓存的详细信息

每秒1次,共5次输出

[root@agent ~]# vmstat 1 5

输出包含一个buffer列,表示缓冲区高速缓存大小,以及一个cache列,表示页缓存大小。

6.sar

(1) 报告当前文件系统的统计信息

每秒1次,共5次输出

[root@agent ~]# sar -v 1 5

(2)-r 选项

每秒1次,共5次输出

[root@agent ~]# sar -r 1 5

输出了分别代表缓冲区高速缓存大小以及页缓存大小的kbbuffers 和 kbcached

7.slabtop

(1) 打印有关内核slab缓存的信息,有些用于文件系统缓存

[root@agent ~]# slabtop -o

8.strace

(1) 文件系统延时,测量系统操作事件

选项-tt在左侧打印出相对时间戳,而选项-T在右侧打印出系统调用事件

[root@agent ~]# strace -ttT -p 755

9.opensnoop

(1) 跟踪文件打开

①   -T选项包含时间戳

[root@agent ~]# opensnoop -T 

②  -x 选项只显示失败的打开事件

[root@agent ~]# opensnoop -x

10.filetop

(1) 显示最频繁读或者写的文件名

-a显示所有文件,每秒1次,共2次输出

[root@agent ~]# filetop -a 1 2

11.cachestat

(1) 展示页缓存命中和未命中的统计信息

每秒1次,共5次输出

[root@agent ~]# cachestat -T 1 5

二、问题

1.Ftrace实例如何实现

(1)Ftrace 三板斧

  1. 1)设置 tracer 类型
  2. 2)设置 tracer 参数
  3. 3)使能 tracer

2.Function trace 如何跟踪实例

(1)查看

  1. 1)进入 ftrace 工作目录
  2. cd /sys/kernel/debug/tracing
  3. 2)查看系统支持的 tracer 类型
  4. cat available_tracers
  5. 3)Disable tracer
  6. echo 0 > tracing_on
  7. 4)设置 tracer 类型为 function
  8. echo function > current_tracer
  9. 5)设置 tracer 类型为 function
  10. echo function > current_tracer
  11. 6)set_ftrace_filter 表示要跟踪的函数,这里我们只跟踪 dev_attr_show 函数
  12. echo dev_attr_show > set_ftrace_filter
  13. 7)Enable tracer
  14. echo 1 > tracing_on
  15. 8)提取 trace 结果
  16. cat trace

(2)检查当前所设置的跟踪器

cat current_tracer

(3)开始跟踪

  1. 1)初始化跟踪
  2. echo 1 > tracing_on
  3. 2)将跟踪文件保存到一个临时文件
  4. cat trace > /tmp/trace.txt
  5. 3)禁用跟踪功能
  6. echo 0 > tracing_on
  7. 4) 查看trace文件的输出。
  8. cat /tmp/trace.txt | head -25


 

3.function_graph Trace 如何跟踪实例

(1) 查看

  1. 1)进入 ftrace 工作目录
  2. cd /sys/kernel/debug/tracing
  3. 2)查看系统支持的 tracer 类型
  4. cat available_tracers

(2)设置跟踪器

 ①设置 tracer 类型为 function_graph 

 echo function_graph > current_tracer

(3)检查当前所设置的跟踪器

cat current_tracer

(4)开始跟踪

  1. 1)初始化跟踪
  2. echo 1 > tracing_on
  3. 2)将跟踪文件保存到一个临时文件
  4. cat trace > /tmp/grapgtrace.txt
  5. 3)禁用跟踪功能
  6. echo 0 > tracing_on
  7. 4) 查看trace文件的输出。
  8. cat /tmp/grapgtrace.txt | head -25

4.trace event 如何跟踪实例

(1) 查看

  1. 1)进入 ftrace 工作目录
  2. cd /sys/kernel/debug/tracing
  3. 2)查看系统支持的 tracer 类型
  4. cat available_tracers

(2)打开 sched_switch event (监控系统内进程切换事件)

  1. 1)切换目录
  2. cd /sys/kernel/debug/tracing/events/sched/sched_switch
  3. 2)查看
  4. ls
  5. 3)写入
  6. echo 1 > enable

(3)设置跟踪器

 ①设置 tracer 类型为 function_graph 

echo nop > current_tracer

(4)检查当前所设置的跟踪器

cat current_tracer

(5)开始跟踪

  1. 1)初始化跟踪
  2. echo 1 > tracing_on
  3. 2)将跟踪文件保存到一个临时文件
  4. cat trace > /tmp/traceevent.txt
  5. 3)禁用跟踪功能
  6. echo 0 > tracing_on
  7. 4) 查看trace文件的输出。
  8. cat /tmp/traceevent.txt | head -25

(6)过滤信息

  1. 1)切换目录
  2. cd /sys/kernel/debug/tracing/events/sched/sched_switch
  3. 2)查看
  4. cat format

(7)分析

format 信息可以看出 sched_switch 打印的信息格式,基于上面提供的关键字可以实现信息过滤

print fmt: "prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s%s ==> next_comm=%s next_pid=%d next_prio=%d", REC->prev_comm, REC->prev_pid, REC->prev_prio, (REC->prev_state & ((((0x0000 | 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040) + 1) << 1) - 1)) ? __print_flags(REC->prev_state & ((((0x0000 | 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040) + 1) << 1) - 1), "|", { 0x0001, "S" }, { 0x0002, "D" }, { 0x0004, "T" }, { 0x0008, "t" }, { 0x0010, "X" }, { 0x0020, "Z" }, { 0x0040, "P" }, { 0x0080, "I" }) : "R", REC->prev_state & (((0x0000 | 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040) + 1) << 1) ? "+" : "", REC->next_comm, REC->next_pid, REC->next_prio

查看目录

比如下面的过滤命令可以只显示 chrome 进程的切换信息

echo "prev_comm == 'chrome' || next_comm == 'chrome'" > filter

5.未找到命令

(1)报错

(2)原因分析

未申明环境变量

(3)解决方法

① 临时申明环境变量

[root@agent sched_switch]# export PATH=$PATH:/usr/share/bcc/tools

② 永久申明环境变量

  1. 1)修改配置文件
  2. [root@agent ~]# vim /etc/profile
  3. export PATH=$PATH:/usr/share/bcc/tools
  4. 2)更新
  5. [root@agent ~]# source /etc/profile

③ 成功

6. fatrace有何功能

(1)功能

特殊的跟踪器,使用Linux的fanotify API

(2)命令

 fatrace

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/40126
推荐阅读
相关标签
  

闽ICP备14008679号