当前位置: 首页 > news >正文

性能分析与调优: 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)设置 tracer 类型2)设置 tracer 参数3)使能 tracer

2.Function trace 如何跟踪实例

(1)查看

1)进入 ftrace 工作目录
cd /sys/kernel/debug/tracing2)查看系统支持的 tracer 类型
cat available_tracers3)Disable tracer
echo 0 > tracing_on4)设置 tracer 类型为 function
echo function > current_tracer5)设置 tracer 类型为 function
echo function > current_tracer6)set_ftrace_filter 表示要跟踪的函数,这里我们只跟踪 dev_attr_show 函数echo dev_attr_show > set_ftrace_filter7)Enable tracer
echo 1 > tracing_on8)提取 trace 结果
cat trace

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

cat current_tracer

(3)开始跟踪

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


 

3.function_graph Trace 如何跟踪实例

(1) 查看

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

(2)设置跟踪器

 ①设置 tracer 类型为 function_graph 

 echo function_graph > current_tracer

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

cat current_tracer

(4)开始跟踪

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

4.trace event 如何跟踪实例

(1) 查看

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

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

1)切换目录cd /sys/kernel/debug/tracing/events/sched/sched_switch2)查看
ls3)写入
echo 1 > enable

(3)设置跟踪器

 ①设置 tracer 类型为 function_graph 

echo nop > current_tracer

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

cat current_tracer

(5)开始跟踪

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

(6)过滤信息

1)切换目录
cd /sys/kernel/debug/tracing/events/sched/sched_switch2)查看
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)修改配置文件
[root@agent ~]# vim /etc/profile
export PATH=$PATH:/usr/share/bcc/tools2)更新
[root@agent ~]# source /etc/profile 

③ 成功

6. fatrace有何功能

(1)功能

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

(2)命令

 fatrace

相关文章:

  • Hyperledger Fabric 自动发现网络信息 discover 工具使用
  • 低频信号发生器
  • 商业世界,从2023到2024
  • 回顾2023,立2024flag
  • 基于Java (spring-boot)的停车场管理系统
  • 20240112让移远mini-PCIE接口的4G模块EC20在Firefly的AIO-3399J开发板的Android11下跑通【DTS部分】
  • ActiveMQ:专注消息传递,助您构建高效稳定的系统
  • 人生当努力
  • JUC-线程中断机制和LockSupport
  • 数据结构:队列的链表结构(含完整代码,可复制)
  • docker安装部署Elasticsearch(ES)以及相关配置
  • 井盖异动传感器,守护脚下安全
  • C++之类的静态成员
  • 文件操作(与文件相关)相关笔记
  • 代码随想录第六十三天——被围绕的区域,太平洋大西洋水流问题,最大人工岛
  • [笔记] php常见简单功能及函数
  • 【node学习】协程
  • 【个人向】《HTTP图解》阅后小结
  • 【知识碎片】第三方登录弹窗效果
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Android组件 - 收藏集 - 掘金
  • Codepen 每日精选(2018-3-25)
  • Hexo+码云+git快速搭建免费的静态Blog
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • js递归,无限分级树形折叠菜单
  • Service Worker
  • 实战|智能家居行业移动应用性能分析
  • 我与Jetbrains的这些年
  • 小程序测试方案初探
  • #define、const、typedef的差别
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (14)Hive调优——合并小文件
  • (70min)字节暑假实习二面(已挂)
  • (9)STL算法之逆转旋转
  • (java)关于Thread的挂起和恢复
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (利用IDEA+Maven)定制属于自己的jar包
  • (五)Python 垃圾回收机制
  • (转)VC++中ondraw在什么时候调用的
  • (转)大型网站的系统架构
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转载)虚函数剖析
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET NPOI导出Excel详解
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • [BUUCTF 2018]Online Tool
  • [C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强
  • [C#]扩展方法
  • [C/C++]关于C++11中的std::move和std::forward
  • [Git].gitignore失效的原因
  • [halcon案例2] 足球场的提取和射影变换
  • [HTTP]HTTP协议的状态码
  • [IE编程] IE8 新增的C++开发接口