除了 CPU 和内存,硬盘读写(I/O)能力也是影响 Linux 系统性能的重要因素之一。本节将介绍几个可用来查看硬盘读写性能的系统命令,并教大家如何通过这些命令的输出结果,判断出当前系统中硬盘是否处于超负荷运转。

Linux查看硬盘读写性能:sar -d命令

《Linux sar命令》一节,已经对 sar 命令的基本用法做了详细的介绍,这里不再赘述,接下来主要讲解如何通过 sar -d 命令分析出硬盘读写的性能。

下面是执行 sar -d 命令的输出结果样例:

[root@localhost ~]# sar -d 3 5

Linux 2.6.32-431.el6.x86_64 (localhost) 10/25/2019 _x86_64_ (1 CPU)

06:36:52 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util

06:36:55 AM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

06:36:55 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util

06:36:58 AM dev8-0 1.00 0.00 12.00 12.00 0.00 0.00 0.00 0.00

06:36:58 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util

06:37:01 AM dev8-0 1.99 0.00 47.76 24.00 0.00 0.50 0.25 0.05

Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util

Average: dev8-0 1.00 0.00 19.97 20.00 0.00 0.33 0.17 0.02

结合以上输出结果,可以遵循如下标准来判断当前硬盘的读写(I/O)性能:

通常情况下 svctm 的大小和硬盘性能有关,其值小于 await。但需要注意的是,CPU、内存的负荷也会对 svctm 的值造成影响,过多的请求也会间接导致 svctm 值的增加。

await 值通常会受到 svctm、I/O 队列长度以及 I/O 请求模式的影响,如果 svctm 的值和 await 很接近,则表示几乎没有 I/O 等待,当前硬盘的性能很好;如果 await 的值远高于 svctm,则表示 I/O 队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。

%util 项也是衡量硬盘 I/O 性能的重要指标,即如果其值接近 100%,就表示硬盘产生的 I/O 请求太多,I/O 系统正在满负荷工作,长期这样会影响系统的性能。必要时,可以优化程序或者更换更大、更快的硬盘来解决这个问题。

Linux查看硬盘读写性能:iostat -d命令

通过执行 iostat -d 命令,也可以查看系统中硬盘的使用情况,如下是执行此命令的一个样例输出:

[root@localhost ~]# iostat -d 2 3

Linux 2.6.32-431.el6.x86_64 (localhost) 10/30/2019 _x86_64_ (8 CPU)

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

sda 5.29 337.11 9.51 485202 13690

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

sda 1.00 8.00 16.00 16 32

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

sda 0.00 0.00 0.00 0 0

此输出结果中,我们重点看后面 4 列,它们各自表示的含义分别是:

Blk_read/s:表示每秒读取的数据块数;

Blk_wrtn/s:表示每秒写入的数据块数;

Blk_read:表示读取的所有块数;

Blk_wrtn:表示写入的所有块数。

注意,此输出结果中,第一次输出的数据是系统从启动以来直到统计时的所有传输信息,从第二次输出的数据开始,才代表在指定检测时间段内系统的传输值。

根据 iostat 命令的输出结果,我们也可以从中判断出当前硬盘的 I/O 性能。比如说,如果 Blk_read/s 的值很大,就表示当前硬盘的读操作很频繁;同样,如果 Blk_wrtn/s 的值很大,就表示当前硬盘的写操作很频繁。对于 Blk_read 和 Blk_wrtn 的大小,没有一个固定的界限,不同的系统应用对应值的范围也不同。但如果长期出现超大的数据读写情况,通常是不正常的,一定程度上会影响系统性能。

不仅如此,iostat 命令还提供了统计指定硬盘 I/O 状况的方法,即使用 -x 选项。例如:

[root@localhost ~]# iostat -x /dev/sda 2 3

Linux 2.6.32-431.el6.x86_64 (localhost) 10/30/2019 _x86_64_ (8 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle

0.09 0.00 0.24 0.26 0.00 99.42

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util

sda 2.00 0.56 2.92 0.44 206.03 7.98 63.56 0.03 9.99 5.31 1.79

avg-cpu: %user %nice %system %iowait %steal %idle

0.31 0.00 0.06 0.00 0.00 99.62

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util

sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

avg-cpu: %user %nice %system %iowait %steal %idle

0.50 0.00 0.06 0.00 0.00 99.44

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util

sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

此输出结果基本和 sar -d 命令的输出结果相同,需要额外说明的几个选项的含义如下:

rrqm/s:表示每秒被合并的读操作数目(文件系统会对读取同一 block 块的请求进行合并)

wrqm/s:表示每秒被合并的写操作数目;

r/s:表示每秒完成读 I/O 设备的次数;

w/s:表示每秒完成写 I/O 设备的次数;

rsec/s:表示每秒读取的扇区数;

wsec/s:表示每秒写入的扇区数;

Linux查看硬盘读写性能:vmstat -d命令

使用 vmstat 命令也可以查看有关硬盘的统计数据,例如:

[root@bogon ~]# vmstat -d 3 2

disk- ------------reads------------ ------------writes----------- -----IO------

total merged sectors ms total merged sectors ms cur sec

sda 6897 4720 485618 71458 1256 1475 21842 9838 0 43

disk- ------------reads------------ ------------writes----------- -----IO------

total merged sectors ms total merged sectors ms cur sec

sda 6897 4720 485618 71458 1256 1475 21842 9838 0 43

该命令的输出结果显示了硬盘的读(reads)、写(writes)以及 I/O 的使用状态。

以上主要讲解了如何通过命令查看当前系统中硬盘 I/O 的性能,其实影响硬盘 I/O 的因素是多方面的,例如应用程序本身、硬件设计、系统自身配置等等。

要想解决硬盘 I/O 的瓶颈,关键是要提高 I/O 子系统的执行效率。比如说,首先从应用程序上对硬盘读写性能进行优化,能够放到内存中执行的操作尽量别保存到硬盘里(内存读写效率要远高于硬盘读写效率);其次,还可以对硬盘存储方法进行合理规划,选择合适的 RAID 存储方式;最后,选择适合自身应用的文件系统,必要时可以使用裸设备提高硬盘的读写性能。

在裸设备上,数据可以直接读写,不必经过操作系统级别的缓存,还可以避免文件系统级别的维护开销(文件系统需要维护超级块、I-node 块等)以及操作系统的 cache 预读功能(减少了 I/O 请求)。

linux怎么查看硬盘读写数据,Linux查看硬盘读写情况(汇总版)相关推荐

  1. Mysql创建数据库表,查看表结构,查看表中数据,查看建表语句

    Mysql创建数据库表,查看表结构,查看表中数据,查看建表语句 1.创建数据库表 create table t_student( 表属性以,隔开 最后一行不用,): 2.查看表结构 desc t_st ...

  2. 电脑坏了怎么把硬盘的mysql数据恢复_硬盘恢复数据技巧:硬盘坏了数据可以恢复吗?...

    一.硬盘格式化数据恢复方法 第一步:首先我们需要一些工具类软件来协助我们恢复数据.打开浏览器搜索"嗨格式数据恢复大师",下载软件并安装: 第二步:安装完成后打开软件,按照软件的选项 ...

  3. linux怎么读取群辉数据,Linux下读取群晖SHR/RAID硬盘组 Data Recovering of Synology DSM SHR/RAID Volume...

    背景 昨天DSM的pgsql坏了,修复的时候一时手贱把群晖的libc.so给弄坏了,彻底瘫了,想到的解决办法如下: linux下读取系统区(DSM下所有初始化过的sata硬盘的头两个分区组的raid) ...

  4. linux多网卡bind发送数据,Linux系统多网卡绑定实战

    原标题:Linux系统多网卡绑定实战 纯手工打造每一篇开源资讯与技术干货,数十万程序员和Linuxer已经关注. 导读 对于服务器来说,网络设备的稳定也是比较重要的,特别是网卡.在生产型的系统中,网卡 ...

  5. linux中mongo的导出数据,Linux下mongodb安装及数据导入导出教程(示例代码)

    Linux下mongodb安装及数据导入导出教程 #查看linux发行版本 cat /etc/issue #查看linux内核版本号 uname -r 一.Linux下mongodb安装的一般步骤 1 ...

  6. linux带行号显示数据,linux中查看文件时显示行号

     [root@1-min etc]# cat -n rsyslog.conf//显示所有行号(包括空行) [root@1-min etc]# cat -b rsyslog.conf         ...

  7. linux读取sd卡文件数据,Linux系统和SD卡读写部分程序.doc

    Linux系统和SD卡读写部分程序 11.1.1 SD卡系统概念 Linux系统移植>第11章SD卡驱动移植,本章重点为SD卡协议介绍和SD卡驱动分析,后面也介绍SD卡驱动移植过程.随着SD卡存 ...

  8. Linux从mysql中读取数据_linux shell中读写操作mysql数据库

    本文介绍了如何在shell中读写mysql数据库.主要介绍了如何在shell 中连接mysql数据库,如何在shell中创建数据库,创建表,插入csv文件,读取mysql数据库,导出mysql数据库为 ...

  9. Linux中复制前10kb的数据,linux基本操作

    linux简介 linux 是一套操作系统 Linux系统内核为linux. 内核是一个电脑程序组成操作系统的核心,链接系统硬件和应用程序. Linux系统是自由和开源的. 连接linux集群 将多个 ...

最新文章

  1. mysql不停止重启服务器_不停止MySQL服务增加从库的两种方式
  2. MVC专题研究(三)——数据绑定和传送
  3. GIS中的拓扑关系和ArcGIS中的拓扑
  4. java源码编译为字节码的流程
  5. Apache Karaf遇到Apache HBase
  6. 企业库(V4.1)入门学习手记
  7. 122 Python程序中的进程池和线程池
  8. jQuery视频弹窗插件可播放mp4,mov等格式
  9. 小米真蓝牙耳机说明书_小米蓝牙耳机使用说明,开箱评测小米蓝牙耳机
  10. Hacking Box Droopy: v0.2
  11. Excel如何把同类数据合并到同一单元格
  12. 验证Kubernetes YAML的最佳实践和策略
  13. 在Linux中安装Pentaho Server 9.1并使用MySQL作为存储库
  14. [PyTroch系列-3]:PyTorch基础 - Hello World程序与张量(Tensor)概述
  15. LINUX基础CAN指令及常见操作
  16. Python实现判断变量类型
  17. linux下c语言调用mysql,Linux下C语言连接MySQL
  18. java实现年会微信签到,签到后在大屏中展示,导出签到信息
  19. (android)向sdcard中添加文件出现Failed to push the item(s)
  20. 安装和测试Python第三方库20200628

热门文章

  1. 度量、流水线能力再升级,博云DevOps产品发布V3.3版本
  2. usb udc 驱动
  3. html5如何插入avi视频,JDG对决LNG!中野联动看点颇多,中野能否抵挡JDG的火热状态?...
  4. elastic search6.2.4配置同义词典synonys
  5. InSAR数据比喻之实验室版(仅供娱乐)
  6. 《程序员》12月刊约稿:技术走向管理要实现的转变
  7. postgresql 的 prepare 探索之一
  8. css伪类visited样式失效问题
  9. 将阿拉伯数字转化成大写的人民币数字
  10. 住建部正式发布《工程总承包管理办法》