测试服务器IO

摘要:
硬盘的I/O访问压力已达到100%。最后一个原因是在线业务代码是同时编写的,导致服务器硬盘I/O表爆炸。我在这里记录是为了方便您和您自己尽快解决此类问题。使用top命令实时查看系统状态信息[root@Mike-VM-Node-172_31_225_214~]#TopCPU状态(CPU):用户模式下的CPU时间比率sy:用于良好加权进程分配的用户模式下CPU时间比率id:

最近服务器反映很慢,查看服务器上的应用程序经常出现超时等等,而且还有时候出现卡死的情况,经过发现服务器I/O压力很大,压力来自硬盘的I/O访问已经达到100%

最后原因是线上业务代码同一时间写入导致服务器硬盘I/O爆表了,我这里纪录一下为了方便各位和自己今后遇到此类问题能尽快解决

使用 top 命令来看一下 实时查看系统状态信息

[root@Mike-VM-Node-172_31_225_214 ~]# top

测试服务器IO第1张

CPU状态(CPU s):  用户进程占用比率、系统进程占用比率、用户的nice 优先级进程占用比率及空闲CPU资源比率等;

内存状态 (Mem):  内存总量、使用量、空闲量等;

交换分区状态( Swap):交换分区总量、使用量、空闲量等;

其中CPU状态下的参数说明 :

  1. us:用户态使用的CPU时间比
  2. sy:系统态使用的CPU时间比
  3. ni: 用做nice加权的进程分配的用户态CPU时间比
  4. id:空闲的CPU时间比
  5. wa:CPU等待磁盘写入完成时间
  6. hi:硬中断消耗时间
  7. si:软中断消耗时间
  8. st:虚拟机偷取时间

可以看到服务器的wa(71.1%)特别高,IO等待所占用的CPU时间的百分比,高过30%时IO压力高,说明是磁盘IO有问题

我们使用 iostat 等命令继续进行详细分析,如果服务器上没有 iostat 要进行安装如下

[root@Mike-VM-Node-172_31_225_214 ~]# yum install sysstat
[root@Mike-VM-Node-172_31_225_214 ~]# iostat 
Linux 3.10.0-514.26.2.el7.x86_64 (Mike-VM-Node172_31_225_214.com)     11/03/2020     _x86_64_    (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.14    0.00    0.04    0.01    0.00   99.81

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               0.44         1.38         4.59    1786837    5940236

[root@Mike-VM-Node-172_31_225_214 ~]# 

参数说明:

%user:CPU处在用户模式下的时间百分比
%nice:CPU处在带NICE值的用户模式下的时间百分比
%system:CPU处在系统模式下的时间百分比
%iowait:CPU等待输入输出完成时间的百分比
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比
%idle:CPU空闲时间百分比

tps:该设备每秒的传输次数,"一次传输"意思是"一次I/O请求"。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的

kB_read/s:每秒从设备读取的数据量

kB_wrtn/s:每秒向设备写入的数据量

kB_read:读取的总数据量

kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes

使用 iostat -x 1 10  命令查看一下IO状态

[root@Mike-VM-Node-172_31_225_214 ~]# iostat -x 1 10
Linux 3.10.0-514.26.2.el7.x86_64 (Mike-VM-Node172_31_225_214.com)     11/03/2020     _x86_64_    (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.13    0.00    0.04    97.01    0.00   99.82

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.10    0.06    0.33     1.07     4.42    28.07     0.00   10.94   22.13    8.83   0.35   0.01

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.00    0.00    4.00   95.00    0.00    0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    0.00 2140.00     0.00  8560.00     8.00    19.87    9.29    0.00    9.29   0.47 100.00

可以查看 %util 100.00  %iowait  95

%util的值一直在增加,磁盘的利用率越来越高,说明对io操作越来越频繁,对磁盘资源的使用越来越多,这与增加对于io操作的线程是一致的

如果 %util 已经 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈

%iowait 大于99% IO压力已经到很极限,一般读取速度有较多的wait

参数说明:

rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
r/s: 每秒完成的读 I/O 设备次数。即 rio/s
w/s: 每秒完成的写 I/O 设备次数。即 wio/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节
wkB/s: 每秒写K字节数。是 wsect/s 的一半
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)
avgqu-sz: 平均I/O队列长度
rsec/s: 每秒读扇区数。即 rsect/s
wsec/s: 每秒写扇区数。即 wsect/s
r_await:每个读操作平均所需的时间
不仅包括硬盘设备读操作的时间,还包括了在kernel队列中等待的时间
w_await:每个写操作平均所需的时间
不仅包括硬盘设备写操作的时间,还包括了在kernel队列中等待的时间
await: 平均每次设备I/O操作的等待时间 (毫秒)
svctm: 平均每次设备I/O操作的服务时间 (毫秒)
%util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比

如果你想对硬盘做一个IO负荷压力测试可以用 fio 命令,如果服务器上没有 fio 要进行安装如下

[root@Mike-VM-Node-172_31_225_214 ~]# yum install -y fio

下面这命令将在指定目录下,生成30个1G文件,是多线程并发执行的

[root@Mike-VM-Node-172_31_225_214 /tmp]# fio -directory=/tmp/ -name=readtest -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=1G -numjobs=30 -runtime=3 -group_reporting 

numjobs=30 表示30个并发

-rw=可供选择的有read单测读write单测写rw读写同时测randrw随机读写同时测randread单测随机读randwrite单测随机写

-runtime=单位是秒,表示测试的总时长

本文分享完毕,感谢支持点赞~~

免责声明:文章转载自《测试服务器IO》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇php持续集成环境笔记JSONPath下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python知识

ISO格式时间  包含百度联盟的广告页面都会有Hm_lpvt_xxxx以及Hm_lvt_xxx这类cookie;其具体含义和用途对于联盟使用者或许根本就不需要知道。 Hm_lpvt_xxxxxxx 为当前时间戳(秒) Hm_lvt_xxx 为一串时间戳。最近的一次访问时间戳追加在后面,最多保留4个时间戳。可以通过关闭浏览器然后再访问相同页面查看其cook...

linux-CPU,Disk,RAM命令总结

一、CPU 请先阅读上一篇CPU和核的概念 1、查看CPU信息 >> cat  /proc/cpuinfo 重要属性意义如下: processor :系统中逻辑处理核的编号。对于单核处理器,则课认为是其CPU编号,对于多核处理器则可以是物理核、或者使用超线程技术虚拟的逻辑核vendor_id :CPU制造商     cpu family :C...

jwt 认证规则

目录 jwt 认证规则: 介绍: 内容: 核心算法: 签发算法: 校验算法: 刷新算法: django-rest-framework-jwt 自定义配置: 模块的使用: _check_payload 方法 : _check_user 方法: jwt 认证规则: 介绍: jwt: json web token 优点:...

关于ZFS、GPT、4K、Geom Label的一些说明

日前重建了之前被玩坏的zfs,碰到几个概念,查了很多资料,理清一下一、关于硬盘分区表目前常用的有两种分区表,MBR和GPT,但是严格来说ZFS并不需要任何一种分区表,ZFS可以直接管理裸盘,换句话说,zfs对硬盘有自己的管理方式,不需要经过MBR或者GPT这一层二、Geom Label和GPT分区表冲突的问题Geom Label使用glabel命令创建,会...

压缩比达到 7:1,TDengine 助力校园智慧用电系统降本增效

作者:惠州工业互联网研究院 小 T 导读:惠州市新一代工业互联网创新研究院(以下简称研究院)成立于 2018 年 6 月,是以部省联动实施国家重点研发计划“宽带通信和新型网络”重点专项为契机,在广东省科技厅和惠州市政府的支持下成立,立足惠州、面向广东、辐射全国、联动国际的工业互联网省级科技创新平台。 为实现宿舍用电的智能化管理、保证学生用电的独立性和安全...

蓝牙简介

1.蓝牙速率 V1.1   1MbpsV2.0   3MbpsV3.0   54MbpsV4.0   0.3Mbps 低功耗 2.目前主流版本是4.2 3.蓝牙5.0与蓝牙4.2的区别相较于目前的普遍使用的蓝牙4.2,蓝牙5.0的主要优势在于传输速度更快、传输距离更远以及使用功耗更低。(1)更快的传输速度蓝牙5.0的传输速度上限为2Mbps,是之前4.2L...