硬件性能 - 磁盘瓶颈分析

news2024/9/22 1:03:34

简介

本文章通过Linux命令输出指标项,简单的介绍硬件资源-磁盘的性能瓶颈分析。其他硬件性能分析如下:

1. 硬件性能 - CPU瓶颈分析

2. 硬件性能 - 掌握内存知识

3. 硬件性能 - 网络瓶颈分析

目录

1. 测试磁盘性能

1.1. 读性能

1.2. 写性能

1.3. 同时读写性能

2. 磁盘监控命令

2.1. iostat

2.2. sar

3. 磁盘瓶颈分析

3.1. 性能分析

3.2. 故障排除


 

1. 测试磁盘性能

1.1. 读性能

纯磁盘读性能,不使用内存(顺序读)

# 共读取5GB大小
sudo dd iflag=direct,nonblock if=/dev/sda of=/dev/null bs=8K count=655360

使用内存读取磁盘速度(顺序读)

# 共读取5GB大小
sudo dd if=/dev/sda of=/dev/null bs=8K count=655360

        上述可以清晰的看到,使用内存读取比纯磁盘读取快 16 倍,这是因为纯磁盘读是通过直接从磁盘读取数据来评估磁盘的读取速度。这种测试会涉及到磁盘的物理读取操作,包括磁头的寻道、旋转等过程。纯磁盘读性能测试可以帮助评估磁盘本身的性能,以及潜在的读取瓶颈。而内存读磁盘是通过先将数据加载到内存中,然后从内存中读取数据来评估磁盘的读取速度。这种测试可以消除磁盘的物理读取过程,因为数据已经在内存中,因此可以提供更高的读取速度。内存读磁盘性能测试主要考察内存的读取速度和其他因素(例如总线带宽)对磁盘性能的影响。

使用内存随机读

# 随机读取5GB大小
dd if=文件 of=/dev/null bs=1M iflag=skip_bytes,count_bytes skip=8192 count=5368709120 seek=$((RANDOM % 5242880))
    skip :替换为要读取的起始偏移量(单位:字节)
    count:读取的大小(单位:字节)

   

1.2. 写性能

纯磁盘写性能,不使用内存(顺序写)

# 共写入5GB大小
sudo dd oflag=direct,nonblock if=/dev/sda of=./test_w bs=8K count=655360

使用内存写入磁盘(顺序写)

# 共写入5GB大小
sudo dd if=/dev/sda of=./test_w bs=8K count=655360

        上述可以清晰的看到,使用内存写入比纯磁盘写入快 3.9 倍,这是因为纯磁盘写是直接将数据写入磁盘并评估写入速度。这种测试会涉及到磁盘的物理写入操作,包括分配磁盘空间、磁头寻道、扇区写入等过程。纯磁盘写性能测试可以帮助评估磁盘本身的写入能力和潜在的写入瓶颈。内存写磁盘是将数据写入内存中,然后再将数据从内存写入磁盘来评估写入速度。这种测试可以消除磁盘的物理写入过程,因为数据已经在内存中,所以可以提供更高的写入速度。内存写磁盘性能测试主要考察内存的写入速度和其他因素(例如总线带宽)对磁盘性能的影响。

使用内存随机写

sudo dd if=/dev/zero of=./test_w bs=1M iflag=skip_bytes,count_bytes skip=8192 count=5368709120 seek=$((RANDOM % 5242880)) conv=notrunc
    skip :替换为要读取的起始偏移量(单位:字节)
    count:读取的大小(单位:字节)

   

1.3. 同时读写性能

纯磁盘同时读写性能,不使用内存(顺序读写)

sudo dd iflag=direct,nonblock oflag=direct,nonblock if=/dev/sda of=./test_rw bs=8K count=655360

 使用内存同时读写(顺序读写)

sudo dd iflag=nonblock oflag=nonblock if=/dev/sda of=./test_rw bs=8K count=655360

        上述可以清晰的看到,使用内存同时读写比纯磁盘同时读写快 3.5 倍,这是因为纯磁盘测试是直接将数据同时读写磁盘并评估读写速度。这种测试会涉及到磁盘的物理同时读写操作,包括分配磁盘空间、磁头寻道、扇区同时读写等过程。纯磁盘性能测试可以帮助评估磁盘本身的同时读写能力和潜在的瓶颈。使用内存读写磁盘是将数据同时读内存中,然后再将数据从内存同时读写磁盘来评估同时读写速度。这种测试可以消除磁盘的物理同时读写过程,因为数据已经在内存中,所以可以提供更高的读写速度。内存性能测试主要考察内存的同时读写速度和其他因素(例如总线带宽)对磁盘性能的影响。

 

 

2. 磁盘监控命令

2.1. iostat

注意:

        iostat在第一行输出时,是根据两个采样间隔的数据进行计算和估算的。首次运行iostat时,第一个采样间隔的数据是无法获取的,因此第一行可能无法提供准确的数据。

查看设备利用率

iostat -d 间隔时间 [监控次数] [指定磁盘名]

Device   :磁盘名
tps      :每秒的传输次数 (Transactions Per Second)。这个值表示每秒完成的读写操作的总次数。
kB_read/s:每秒从磁盘读取的数据量(单位:KB)
kB_wrtn/s:每秒写入磁盘的数据量(单位:KB)
kB_read  :从启动以来磁盘读取的总数据量(单位:KB)
kB_wrtn  :从启动以来写入磁盘的总数据量(单位:KB)

   

查看磁盘详细指标

iostat -dx 间隔时间 [采集次数]
iostat -dx 间隔时间 [采集次数] [指定磁盘名]

Device:设备名
rrqm/s:每秒合并的读请求的数量。合并的读请求是指将多个读请求合并为一个磁盘访问操作的过程。
wrqm/s:每秒合并的写请求的数量。合并的写请求是指将多个写请求合并为一个磁盘访问操作的过程。
r/s   :每秒发出的独立读请求的数量。
w/s   :每秒发出的独立写请求的数量。
rkB/s :每秒读取的数据量(单位:KB)
wkB/ s:每秒写入的数据量(单位:KB)
avgrq-sz:每个请求的平均大小(读和写请求的总和)。较大的avgrq-sz值表示平均每个IO请求的大小较大,可能说明有较大的数据传输或IO操作。这可能是磁盘性能瓶颈的一个指标,因为较大的IO请求可能需要更长的时间来完成。
avgqu-sz:平均请求队列长度。该值越高,表示磁盘IO负载越重。
await:每个IO请求的平均等待时间(单位:ms)。该值表示IO请求等待处理的平均时间。
svctm:每个IO请求的平均服务时间(单位:ms)。该值表示磁盘处理每个IO请求所花费的平均时间。
%util:设备的利用率,即设备处于活动状态的时间百分比。当设备利用率达到100%时,表示设备正处于满负荷状态。

 

如果读写单位大,可以指定单位为 MB(-m)

iostat -dm 1
iostat -dxm 1

   

2.2. sar

监控磁盘I/O

sar -b 间隔时间 [采集次数]

tps    :每秒进行的传输操作的数量(Transfers per Second)
rtps   :每秒的读取次数
wtps   :每秒的写入次数
bread/s:每秒从块设备读取的块数
bwrtn/s:每秒写入块设备的块数

 

监控磁盘详细信息

sar -dp 间隔时间 [采集次数]

DEV     :磁盘名
tps     :每秒传输的I/O操作数
rd_sec/s:每秒从磁盘读取的扇区数
wr_sec/s:每秒写入磁盘的扇区数
avgrq-sz:平均每个请求的扇区数
avgqu-sz:平均请求队列长度
await   :平均每个I/O请求的等待时间(单位:毫秒)
svctm   :平均每个I/O请求的服务时间(单位:毫秒)。它表示处理每个I/O请求所花费的平均时间,较高的值可能表示磁盘性能存在延迟或瓶颈问题
%util   :磁盘利用率,表示自从上次报告以来已过去的时间内设备处于活动状态的百分比

 

 

3. 磁盘瓶颈分析

3.1. 性能分析

以 iostat 输出结果为例

  1. 磁盘利用率 ( %util ):%util 表示设备利用率。当接近100%时,表示设备处于满负荷状态,可能存在磁盘瓶颈。
  2. I/O请求队列 ( avgqu-sz ):avgqu-sz表示请求队列长度。当该值过高(HDD盘大于3,SSD大于5),表示系统中有大量等待处理的IO请求,可能存在瓶颈。
  3. I/O吞吐量: r/sw/s 表示读取和写入的请求数,rkB/s、wkB/s 表示读取和写入的数据量。当请求数和数据量都比较低时(请求数接近0或非常低,读写数据与实际最大传输速率相差较大),可能磁盘性能不足。
  4. I/O响应时间 :await 表示平均每个IO请求的等待时间,svctm 表示平均每个IO请求的服务时间。如果这两个字段的值都比较高(2个字段判断条件:HDD盘大于10ms,SSD盘大于1ms。),可能存在磁盘性能瓶颈。

常见的 I/O 等待瓶颈

        通过磁盘指标能够初步判断磁盘是否存在瓶颈,如果存在瓶颈,需要进一步分析进程或程序的IO行为,再根据实际去优化磁盘访问模式、增加磁盘带宽或其他解决方法。

 

3.2. 故障排除

1. 检查系统负载情况

  • 当负载值大于CPU数量时,表示系统存在性能瓶颈,可能会出现排队、延迟增加、磁盘I/O响应变慢的情况。当然,高负载并不一定意味着磁盘性能问题,还应综合考虑其他因素,例如CPU使用率、内存利用率、网络负载等。这些因素共同影响系统的整体性能。因此,在诊断磁盘性能问题时,需要综合考虑多个指标和因素,以获得更全面和准确的性能分析。

uptime 或 top 查看系统负载情况

  • 后面3个值分别表示 1/5/15分钟负载情况

 

2. 检查磁盘空间使用率

  • 如果该块磁盘的空间使用达到99%或已满的情况,也有可能影响磁盘的整体性能。需删除不必要的大文件。

df -h 查看磁盘空间使用情况

 

3. 关闭不必要的其他进程

  • 某些进程可能占用大量 I/O 资源,影响当前程序性能。检查后台运行进程,关闭或限制不必要的进程。

pidstat -d 查看使用磁盘的进程

  • PID:进程的PID
  • kB_rd/s:磁盘每秒读数据(单位:KB)
  • kB_wr/s:磁盘每秒写数据(单位:KB)
  • kB_ccwr/s:已被任务取消写入磁盘的数据(单位:KB)
  • Command:进程的命令名称

 

4. 检查磁盘驱动

  • 需要确保计算机使用的 "磁盘驱动程序" 是最新版本,如果是旧版本或不兼容的驱动程序,可能会导致磁盘的使用性能。访问磁盘官网,下载最新版本驱动。

 

5. 调整I/O设置

  • 根据需要调整操作系统的 I/O 设置来优化磁盘性能(I/O调度器、文件系统缓存参数、读写缓存区等)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/733142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MachineLearningWu_5_MultipleLinearRegression

在进行多元线性回归的时候,我们需要规定一些基本法则。例如我们使用 x j ( i ) x_j^{(i)} xj(i)​来表示第i个sample的第j个特征。 将单元的线性回归变为多元线性回归,公式将变换为如下, 为了实现更简单的数学表达式,我们将表达式…

haproxy负载均衡

目录 一.常见的web集群调度器 二.haproxy的概念 三.特性 四 图解haproxy 五 haproxy的配置文件详解 一.常见的web集群调度器 1.目前常见的web集群调度器分为软件和硬件 2.软件通常使用开源的lvs/haproxy/nginx 3.硬件一般使用比较多的是f5 也有国内的产品 二.haproxy的…

LeetCode:合并区间

题目:56. 合并区间 - 力扣(Leetcode) 讲这道题之前,先介绍一下sort函数的骚操作。 sort函数可以用于二维数组的排序!!! 解释: 这里sort函数也是从小到大进行排序,只…

确保无缝、安全的云转型

随着云计算继续主导数字化转型(这是理所当然的),组织面临着双重挑战:将运营无缝转移到云并确保这种转型的安全。 虽然云的采用保证了可扩展性、成本效率和生产力的提高,但保持警惕对于组织防范网络安全威胁和安全漏洞…

webpack5搭建与基本概念

webpack基础构建 新建文件夹进入文件夹查看是否安装node,命令:node-v创建package.json文件,命令:npm init -y安装webpack和webpack-cli,(命令自动创建出package-lock.json文件和node_modules文件夹&#x…

【智慧交通项目实战】《 OCR车牌检测与识别》(一)项目介绍

👨‍💻作者简介: CSDN、阿里云人工智能领域博客专家,新星计划计算机视觉导师,百度飞桨PPDE,专注大数据与AI知识分享。✨公众号:GoAI的学习小屋 ,免费分享书籍、简历、导图等,更有交流群分享宝藏资料,关注公众号回复“加群”或➡️点击链接 加群。 🎉专栏推荐: 点…

指针进阶(1)(字符指针,指针数组,数组指针,函数指针)

目录 前言: 字符指针 TIP: 指针数组 数组指针 概念辨析 形式辨析 数组名的理解: 数组指针如何使用? 二维数组的传参 函数指针 函数的地址: 函数指针的形式 函数指针的作用 关于函数指针一些奇特的点 前言&…

Java基础知识 之 java Applet 小训练

import java.applet.Applet; import java.awt.*; import java.util.Random;import static java.lang.Math.cos; import static java.lang.Math.sin;public class HelloWorldApplet extends Applet {public void paint(Graphics g) {// 将Graphics对象转换为Graphics2D类型java.…

Linux 系统编辑 --文件IO

目录 1.文件 IO 1.1系统调用 1.2 C 标准库文件 IO 函数 1.3 open/close 函数 1.4 文件描述符表 1.7 read/write 函数 1.8 缓冲区 1.9 错误处理函数 2.0 阻塞、非阻塞 2.1 lseek 函数 辅助学习资料 参考书 1 :《 Unix 环境高级编程》 W.Richard St…

MFC学习日记(二)——VS2012应用程序工程中文件的组成结构

上一篇我们用应用程序向导生成框架程序后,我们可以打开工程所在的文件夹看到以下以解决方案命名的文件夹,此文件夹中包含了几个文件和一个以工程名命名的子文件夹,这个子文件夹中又包含了若干个文件和一个res文件夹,创建工程时的选…

Vue2:axios解决跨域的问题(vue2没有config情况下)

在vue2上用axios发起Post模拟注册的时候,调用接口,提示报错: axios({method: post,url: http://1.12.254.80:8080/api/user/register,// url: /user/api/user/register,data: { // 请求体数据userAccount: userName,userPassword: pwd1,check…

离线环境下安装微软Visual Studio 2022 生成工具

1. 前言 最近,在学习cython的时候,需要安装windows下的C/C编译、链接工具。开始觉得传统的msvc太大了,想要尝试Mingw,但是都是编译错误。无奈之下,还是要安装msvc。 微软提供了Visual Studio 2022 Build Tools &…

MySQl数据库第五课 --------在SQl的简单命令--------学习学习

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com ———————————————————————————— 目录 数据库的简单介绍 1.数据储存 2.数据库类型 (1).关系型数据库 (2).非关系型数据库…

大学英语六级相当于雅思考试多少分

雅思考试的难度,可以和大学英语六级进行对应,大家可以通过分数来基本确认雅思考试的难度系数。跟着小编来一起看看大学英语六级相当于雅思考试多少分? 英语六级相当于雅思多少分 大学英语六级和雅思没有直接的分数对应关系,一般大…

部署LVS+Keepalived高可用集群

目录 一、keepalived概述 1.1管理LVS负载均衡软件 1.2VRRP(Virtual Router Redundancy Protocol) 原理 二、keepalived服务的重要功能 2.1自动切换(failover) 2.2健康检查(health checking) 2.3高可用(HA&#x…

深度神经网络剪枝算法基础理论

非结构化剪枝可获得更高的剪枝率与精度,但是其非结构化特征带来的随机连接使得往往需要专门的软、硬件设计来支持其推理加速,而在现有的边缘硬件上难以满足其应用条件。鉴于此,目前在剪枝领域的研究多集中在结构化剪枝上,如图1.11…

RabbitMQ系列(22)--RabbitMQ优先级队列

前言:在购物系统中有一个订单催付的场景,如果客户在购物系统下单后在设定的时间内未付款那么就会给客户推送一条短信提醒,这是一个比较简单的功能,但是,商家对我们来说,肯定是要区分大客户和小客户的&#…

Xshell7/Xftp7 解决强制更新问题:要继续使用此程序,您必须应用最新的更新或使用最新版本

文章目录 一、背景二、解决方案方案一:重新安装(推荐)方案二:修改nslicense.dll文件(不推荐)方案三:修改系统时间(可选)Xshell.batXftp.bat 三、总结 一、背景 Xshell7/…

音频编码流程 ----- PCM编码为AAC格式

文章目录 1.音频编码流程2.编码函数API含义解释3.音频编码实战Demo PCM转AAC格式 1.音频编码流程 2.编码函数API含义解释 av_frame_make_writable 确保帧数据可写,尽可能避免数据复制.如果帧可写,则不执行任何操作,如果不可写,则…

ssm整合shiro安全框架 前后端分离项目

上一篇文章我们使用ssm整合了shiro安全框架前后端没有进行分离 本篇文章在上一章的项目基础上进行前后端代码分离操作 一、根据账号和密码登录后前后端代码分离🍉 (1)定义一个统一的json类 统一返回的格式🥝 package com.lzq.vo;import lombok.AllArg…