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

性能分析与调优: Linux 磁盘I/O 观测工具

目录

一、实验

1.环境

2.iostat

3.sar

4.pidstat

5.perf

6. biolatency

7. biosnoop

8.iotop、biotop

9.blktrace

10.bpftrace

11.smartctl

二、问题

1.如何查看PSI数据

2.iotop如何安装

3.smartctl如何使用


一、实验

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)磁盘I/O观测工具

表1-2 磁盘I/O观测工具

序号工具描述
1iostat单个磁盘的各种统计信息
2sar磁盘历史统计信息
3pidstat按进程列出磁盘I/O使用情况
4perf记录块I/O跟踪点
5biolatency把磁盘I/O延时汇总成直方图
6biosnoop带PID和延时来跟踪磁盘I/O
7iotop、biotop磁盘的top程序:按进程汇总磁盘I/O
8blktrace磁盘I/O事件跟踪
9bpftrace自定义磁盘跟踪
10smartctl磁盘控制器统计信息

2.iostat

(1) 打印CPU和磁盘自启动以来的统计信息

每秒1次,共计5次

[root@agent ~]# iostat 1 5

(2)-x扩展统计、-z 跳过零活设备

每秒1次,共计5次

[root@agent ~]# iostat -xz 1 5 

(3) -d 只关注磁盘统计信息(没有CPU)、-m 代表MB、-t代表时间戳、-p ALL 表示包括每个分区统计

每秒1次,共计1次

[root@agent ~]# iostat -dmtxz -p ALL 1 1

3.sar

(1) -d 报告磁盘汇总信息

每秒1次,共计5次

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

4.pidstat

(1)-d 输出磁盘I/O 的统计信息

每秒1次,共计5次

[root@agent ~]# pidstat -d 1 5

5.perf

(1) 查询块tracepoint

[root@agent ~]# perf list "block:*"

(2) 用栈踪迹来记录块设备问题

sleep 10  跟踪的持续时间为10秒

[root@agent ~]# perf record -e block:block_rq_issue -a -g sleep 10[root@agent ~]# perf script --header

(3)使用过滤器与块tracepoint

①跟踪所有大小不小于100KB的块I/O 完成事件,CTRL+C结束

[root@agent ~]# perf record -e block:block_rq_complete --filter 'nr_sector > 200'

②跟踪所有的块I/O 同步写完成事件,CTRL+C结束

[root@agent ~]# perf record -e block:block_rq_complete --filter 'rwbs == "ws"'

③ 跟踪所有的块I/O 写完成事件,CTRL+C结束

[root@agent ~]# perf record -e block:block_rq_complete --filter 'rwbs ~ "*W*"'

(4)磁盘I/O延时

① 记录磁盘发出和完成事件,睡眠60秒

[root@agent ~]# perf record -e block:block_rq_issue,block:block_rq_complete -a sleep 60

② 写入指定文件

[root@agent ~]# perf script --header > out.disk01.txt

③ 查看文件

[root@agent ~]# vim out.disk01.txt 

6. biolatency

(1)以直方图的形式显示磁盘I/O延时

①BCC跟踪块I/O 10秒

[root@agent ~]# biolatency 10 1

(2)-F 显示每个I/O标志位组的直方图,-m以毫秒为单位输出

[root@agent ~]# biolatency -Fm 10 1

7. biosnoop

(1) 输出每个磁盘I/O的单行摘要

[root@agent ~]# biosnoop

(2)离群点分析

①写入一个文件

[root@agent ~]# biosnoop > out.biosnoop01.txt

② 安装延时列将输出排序,并打印最后5个条目(高延时项目)

[root@agent ~]# sort -n -k 8,8 out.biosnoop01.txt | tail -5

③文本编辑器打开输出

[root@agent ~]# vim out.biosnoop01.txt 

④ 从最快到最慢遍历离群值,寻找第一列的时间

(3)排队时间

-Q 显示从创建I/O 到向设备发出的时间

[root@agent ~]# biosnoop -Q

8.iotop、biotop

(1) iotop

①  -b 批量模式来提供滚动输出(不清楚屏幕)、-d5 间隔时间为5秒、-o 显示I/O 进程

[root@agent ~]# iotop -bod5

(2)biotop

① 磁盘的top工具

[root@agent ~]# biotop 

9.blktrace

(1)块设备I/O 事件的自定义跟踪工具

[root@agent ~]# blktrace -d /dev/sda -o - | blkparse -i -

(2)等价命令

[root@agent ~]# btrace /dev/sda 

(3)活动功率

① -a issue 跟踪D活动(发出I/O)

[root@agent ~]# btrace -a issue /dev/sda

(4) 分析

① 查看磁盘

[root@agent tracefiles]# lsblk

② dev/sda 上使用blktrace来分析

[root@agent tracefiles]# blktrace -d /dev/sda -o out -w 10

③ 写入跟踪文件

[root@agent tracefiles]# blkparse -i out.blktrace.* -d out.bin

④ 分析I/O轨迹的btt

[root@agent tracefiles]# btt -i out.bin

⑤ 查看当前目录

[root@agent tracefiles]# ls

10.bpftrace

(1) 计数块I/O tracepoint事件

[root@agent tracefiles]#  bpftrace -e 'tracepoint:block:* { @[probe] = count(); }'

(2) 把块I/O 大小汇总成一张直方图

[root@agent ~]#  bpftrace -e 't:block:block_rq_issue { @bytes = hist(args->bytes); }'

(3)计数块I/O 请求的用户栈踪迹

[root@agent ~]#  bpftrace -e 't:block:block_rq_issue { @[ustack] = count(); }'

[root@agent ~]#  bpftrace -e 't:block:block_rq_insert { @[ustack] = count(); }'

(4)计数块I/O 类型的标识位

[root@agent ~]#  bpftrace -e 't:block:block_rq_issue { @[args->rwbs] = count(); }'

(5)跟踪块I/O 错误,包括设备和I/O类型

[root@agent ~]#  bpftrace -e 't:block:block_rq_complete /args->error/ { printf("dev %d type %s error %d/n", args->dev, args->rwbs, args->error); }'

(6)计数SCSI操作码

[root@agent ~]#  bpftrace -e 't:scsi:scsi_dispatch_cmd_start { @opcode[args->opcode] = count(); }'

(7)计数SCSI结果码

[root@agent ~]#  bpftrace -e 't:scsi:scsi_dispatch_cmd_done { @result[args->result] = count(); }'

(8)计数SCSI驱动程序函数

[root@agent ~]#  bpftrace -e 'kprobe:scsi* { @[func] = count(); }'

(9)磁盘I/O大小

① 按请求进程名称细分的磁盘I/O大小分布

[root@agent ~]#  bpftrace -e 't:block:block_rq_issue /args->bytes/ { @[comm] = hist(args->bytes); }'

② 添加args->rwbs作为直方图键,输出将按I/O类型进一步细分

[root@agent ~]#  bpftrace -e 't:block:block_rq_insert /args->bytes/ { @[comm, args->rwbs] = hist(args->bytes); }'

11.smartctl

(1)输出 SMART(自监测、分析和报告技术)数据 

[root@agent ~]# smartctl --all  /dev/sda

二、问题

1.如何查看PSI数据

(1)命令

[root@agent ~]# cat /proc/pressure/io

 some开头的一行显示了一些任务(线程)受到影响的时间,full开头的一行显示了所有可运行任务受到影响的时间

2.iotop如何安装

(1)搜索

[root@agent ~]# yum search iotop

(2)安装

[root@agent ~]# yum install iotop -y                   

3.smartctl如何使用

(1)命令

[root@agent ~]# smartctl -h

(2)参数

Usage: smartctl [options] device============================================ SHOW INFORMATION OPTIONS =====-h, --help, --usageDisplay this help and exit-V, --version, --copyright, --licensePrint license, copyright, and version information and exit-i, --infoShow identity information for device--identify[=[w][nvb]]Show words and bits from IDENTIFY DEVICE data                (ATA)-g NAME, --get=NAMEGet device setting: all, aam, apm, dsn, lookahead, security,wcache, rcache, wcreorder, wcache-sct-a, --allShow all SMART information for device-x, --xallShow all information for device--scanScan for devices--scan-openScan for devices and try to open each device================================== SMARTCTL RUN-TIME BEHAVIOR OPTIONS =====-j, --json[=[cgiosuv]]Print output in JSON format-q TYPE, --quietmode=TYPE                                           (ATA)Set smartctl quiet mode to one of: errorsonly, silent, noserial-d TYPE, --device=TYPESpecify device type to one of:ata, scsi[+TYPE], nvme[,NSID], sat[,auto][,N][+TYPE], usbcypress[,X], usbjmicron[,p][,x][,N], usbprolific, usbsunplus, sntjmicron[,NSID], intelliprop,N[+TYPE], marvell, areca,N/E, 3ware,N, hpt,L/M/N, megaraid,N, aacraid,H,L,ID, cciss,N, auto, test-T TYPE, --tolerance=TYPE                                           (ATA)Tolerance: normal, conservative, permissive, verypermissive-b TYPE, --badsum=TYPE                                              (ATA)Set action on bad checksum to one of: warn, exit, ignore-r TYPE, --report=TYPEReport transactions (see man page)-n MODE[,STATUS], --nocheck=MODE[,STATUS]                           (ATA)No check if: never, sleep, standby, idle (see man page)============================== DEVICE FEATURE ENABLE/DISABLE COMMANDS =====-s VALUE, --smart=VALUEEnable/disable SMART on device (on/off)-o VALUE, --offlineauto=VALUE                                       (ATA)Enable/disable automatic offline testing on device (on/off)-S VALUE, --saveauto=VALUE                                          (ATA)Enable/disable Attribute autosave on device (on/off)-s NAME[,VALUE], --set=NAME[,VALUE]Enable/disable/change device setting: aam,[N|off], apm,[N|off],dsn,[on|off], lookahead,[on|off], security-freeze,standby,[N|off|now], wcache,[on|off], rcache,[on|off],wcreorder,[on|off[,p]], wcache-sct,[ata|on|off[,p]]======================================= READ AND DISPLAY DATA OPTIONS =====-H, --healthShow device SMART health status-c, --capabilities                                            (ATA, NVMe)Show device SMART capabilities-A, --attributesShow device SMART vendor-specific Attributes and values-f FORMAT, --format=FORMAT                                          (ATA)Set output format for attributes: old, brief, hex[,id|val]-l TYPE, --log=TYPEShow device log. TYPE: error, selftest, selective, directory[,g|s],xerror[,N][,error], xselftest[,N][,selftest], background,sasphy[,reset], sataphy[,reset], scttemp[sts,hist],scttempint,N[,p], scterc[,N,M], devstat[,N], defects[,N], ssd,gplog,N[,RANGE], smartlog,N[,RANGE], nvmelog,N,SIZE-v N,OPTION , --vendorattribute=N,OPTION                            (ATA)Set display OPTION for vendor Attribute N (see man page)-F TYPE, --firmwarebug=TYPE                                         (ATA)Use firmware bug workaround:none, nologdir, samsung, samsung2, samsung3, xerrorlba, swapid-P TYPE, --presets=TYPE                                             (ATA)Drive-specific presets: use, ignore, show, showall-B [+]FILE, --drivedb=[+]FILE                                       (ATA)Read and replace [add] drive database from FILE[default is +/etc/smartmontools/smart_drivedb.hand then    /usr/share/smartmontools/drivedb.h]============================================ DEVICE SELF-TEST OPTIONS =====-t TEST, --test=TESTRun test. TEST: offline, short, long, conveyance, force, vendor,N,select,M-N, pending,N, afterselect,[on|off]-C, --captiveDo test in captive mode (along with -t)-X, --abortAbort any non-captive test on device=================================================== SMARTCTL EXAMPLES =====smartctl --all /dev/sda                    (Prints all SMART information)smartctl --smart=on --offlineauto=on --saveauto=on /dev/sda(Enables SMART on first disk)smartctl --test=long /dev/sda          (Executes extended disk self-test)smartctl --attributes --log=selftest --quietmode=errorsonly /dev/sda(Prints Self-Test & Attribute errors)smartctl --all --device=3ware,2 /dev/sdasmartctl --all --device=3ware,2 /dev/twe0smartctl --all --device=3ware,2 /dev/twa0smartctl --all --device=3ware,2 /dev/twl0(Prints all SMART info for 3rd ATA disk on 3ware RAID controller)smartctl --all --device=hpt,1/1/3 /dev/sda(Prints all SMART info for the SATA disk attached to the 3rd PMPortof the 1st channel on the 1st HighPoint RAID controller)smartctl --all --device=areca,3/1 /dev/sg2(Prints all SMART info for 3rd ATA disk of the 1st enclosureon Areca RAID controller)

相关文章:

性能分析与调优: Linux 磁盘I/O 观测工具

目录 一、实验 1.环境 2.iostat 3.sar 4.pidstat 5.perf 6. biolatency 7. biosnoop 8.iotop、biotop 9.blktrace 10.bpftrace 11.smartctl 二、问题 1.如何查看PSI数据 2.iotop如何安装 3.smartctl如何使用 一、实验 1.环境 (1)主机 …...

Could not erase files or folders:

IDEA删除 git 的 localChanges 内的文件时,提示Could not erase files or folders:。 确认下这个文件是否被打开,忘记关闭了;关闭后可以被删除。(文件被打开的情况下,用操作系统自带的删除,也无法删除成功…...

算法训练营第四十四天|动态规划:完全背包理论基础 518.零钱兑换II 377. 组合总和 Ⅳ

目录 动态规划:完全背包理论基础Leetcode518.零钱兑换IILeetcode377. 组合总和 Ⅳ 动态规划:完全背包理论基础 文章链接:代码随想录 题目链接:卡码网:52. 携带研究材料 思路:完全背包问题,物品可…...

探索计算机网络:应用层的魅力

在当今数字化时代,计算机网络已成为我们生活和工作中不可或缺的一部分。网络的每一层都扮演着独特而重要的角色,而应用层,作为网络模型中用户最直接接触的部分,其重要性不言而喻。这篇文章旨在深入探索应用层的核心概念、功能以及…...

MySQL 按日期流水号 条码 分布式流水号

有这样一个场景,有多台终端,要获取唯一的流水号,流水号格式是 日期0001形式,使用MySQL的存储过程全局锁实现这个需求。 以下是代码示例。 注:所有的终端连接到MySQL服务器获取流水号,如果获取到的是 “-1”…...

前端导出Excel文件,部分数字前面0消失处理办法

详细导出可以看之前的文章 js实现导出Excel文档_js 通过 接口 导出 xlsx 代码-CSDN博客 今天的问题是导出一些数据时,有些字段是前面带有0的字符串,而导出后再excel中就被识别成了数字 如图本来字符串前面的0 都没了 解决方案 1. 导出的时候在前面加单…...

零基础学Python网络爬虫案例实战 全流程详解 高级进阶篇

零基础学Python网络爬虫案例实战 全流程详解 入门与提高篇 零基础学Python网络爬虫案例实战 全流程详解 高级进阶篇 编辑推荐 本书讲解了Python爬虫技术的高级进阶知识,帮助有一定爬虫基础的读者进一步提高爬虫技术。本书详解了突破反爬机制的常用手段以及Scrapy和…...

第十二届“中关村青联杯”全国研究生数学建模竞赛-A题:水面舰艇编队防空和信息化战争评估模型(续)(附MATLAB代码实现)

目录 5.3.3 问题三的总结 5.4 问题四的模型建立与求解 5.4.1 问题分析 5.4.2 计算方位角和航向角...

bmp图像文件格式超详解

0 BMP简介 BMP(Bitmap-File)图形文件,又叫位图文件,是Windows采用的图形文件格式,在Windows环境下运行的所有图像处理软件都支持BMP图像文件格式。Windows系统内部各图像绘制操作都是以BMP为基础的。一个BMP文件由四部分组成: B…...

Unity Meta Quest 一体机开发(十三):【手势追踪】自定义交互事件 EventWrapper

文章目录 📕教程说明📕交互事件概述📕自定义交互逻辑⭐方法一:Inspector 面板赋值⭐方法二:纯代码处理 此教程相关的详细教案,文档,思维导图和工程文件会放入 Spatial XR 社区。这是一个高质量…...

13、Redis高频面试题

1、项目中为什么用Redis 我们项目中之所以选择Redis,主要是因为Redis有下面这些优点: 操作速度快:Redis的数据都保存在内存中,相比于其它硬盘类的存储,速度要快很多数据类型丰富:Redis支持 string&#x…...

Koa学习笔记

1、npm 初始化 npm init -y生成 package.json 文件,记录项目的依赖2、git 初始化 git init生成 .git 隐藏文件夹,.git 的本地仓库创建 .gitignore 文件,添加不提交文件的名称3、创建 ReadMe.md 文件 记录项目笔记4、搭建项目 安装 Koa 框架npm install koa5、编写最基本的…...

HiDataPlus 3.3.2-005 搭建(个人的一点心得体会 x86 平台)

HDP 集群搭建 前置安装 yum -y install createrepo yum install -y lrzsz yum install -y wget yum install -y vim修改当前集群机器的主机名 hostnamectl set-hostname XXX​ 这里的 XXX 就是要设置的当前机器的主机名称。主机名称是集群唯一的,一定不要重复&am…...

【PHP】PHP实现与硬件串口交互,接收硬件发送的实时数据

一、前言 目的:借助虚拟串口软件(VSPD)模拟硬件串口发送数据,使用PHP语言实现接收硬件发送的数据。 我这里的需求是连接天平,把天平的称量数据实时的传送到PHP使用。 使用工具:vspd串口调试工具 使用语…...

HNU-数据库系统-作业

数据库系统-作业 计科210X 甘晴void 202108010XXX 第一章作业 10.09 1.(名词解释)试述数据、数据库、数据库管理系统、数据库系统的概念。 数据,是描述事物的符号记录。 数据库(DB),是长期存储在计算机内、有组织、可共享的大量…...

Python基础知识:整理10 异常相关知识

1 异常的捕获 1.1 基础写法 """基本语法:try:可能发生错误的代码except:如果出现异常,将执行的代码""" try:fr open("D:/abc.txt", "r", encoding"utf-8") except:print("出现异常…...

golang并发安全-select

前面说了golang的channel, 今天我们看看golang select 是怎么实现的。 数据结构 type scase struct {c *hchan // chanelem unsafe.Pointer // 数据 } select 非默认的case 中都是处理channel 的 接受和发送,所有scase 结构体中c是用来存储…...

微软Visual Studio产品之Visual C++编程进阶——一维数组(画画版)

我是荔园微风,作为一名在IT界整整25年的老兵,看到不少初学者在学习编程语言的过程中如此的痛苦,我决定做点什么,我小时候喜欢看小人书(连环画),在那个没有电视、没有手机的年代,这是…...

Moonbeam生态项目分析 — — 下一代DeFi协议HydraDX

作者:David 概览 HydraDX是一个基于Substrate区块链框架构建的DeFi协议,旨在为波卡带来大量流动性。HydraDX的特色服务,HydraDX Omnipool,是一种创新的自动化做市商(AMM),通过将所有资产组合在…...

Spark九:Spark调优之Shuffle调优

Spark shuffle调优方法 map端和reduce端缓存大小设置,reduce端重试次数和等待时间间隔,以及bypass设置 学习资料:https://mp.weixin.qq.com/s/caCk3mM5iXy0FaXCLkDwYQ 一、map和reduce端缓冲区大小 1.1 map端 在Spark任务运行过程中&…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...

企业如何增强终端安全?

在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...