51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4052|回复: 1
打印 上一主题 下一主题

[转贴] 码住这篇文章,再遇到服务器反映慢的情况就不怕了

[复制链接]
  • TA的每日心情
    擦汗
    3 天前
  • 签到天数: 1042 天

    连续签到: 4 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2021-1-29 09:51:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    最近服务器反映很慢,查看服务器上的应用程序经常出现超时等等,而且还有时候出现卡死的情况,经过发现服务器I/O压力很大,压力来自硬盘的I/O访问已经达到100%。
      最后原因是线上业务代码同一时间写入导致服务器硬盘I/O爆表了,我这里纪录一下为了方便各位和自己今后遇到此类问题能尽快解决。
      使用 top 命令来看一下 实时查看系统状态信息:
    [root@Mike-VM-Node-172_31_225_214 ~]# top

      CPU状态(CPU s):  用户进程占用比率、系统进程占用比率、用户的nice 优先级进程占用比率及空闲CPU资源比率等;
      内存状态 (Mem):  内存总量、使用量、空闲量等;
      交换分区状态( Swap):交换分区总量、使用量、空闲量等;
      其中CPU状态下的参数说明 :
      us:用户态使用的CPU时间比
      sy:系统态使用的CPU时间比
      ni: 用做nice加权的进程分配的用户态CPU时间比
      id:空闲的CPU时间比
      wa:CPU等待磁盘写入完成时间
      hi:硬中断消耗时间
      si:软中断消耗时间
      st:虚拟机偷取时间
      可以看到服务器的wa(71.1%)特别高,IO等待所占用的CPU时间的百分比,高过30%时IO压力高,说明是磁盘IO有问题。
      我们使用 iostat 等命令继续进行详细分析,如果服务器上没有 iostat 要进行安装如下:
    1. [root@Mike-VM-Node-172_31_225_214 ~]# yum install sysstat
    2. [root@Mike-VM-Node-172_31_225_214 ~]# iostat
    3. Linux 3.10.0-514.26.2.el7.x86_64 (Mike-VM-Node172_31_225_214.com)     11/03/2020     _x86_64_    (1 CPU)

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

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

    8. [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状态。
    1. [root@Mike-VM-Node-172_31_225_214 ~]# iostat -x 1 10
    2. Linux 3.10.0-514.26.2.el7.x86_64 (Mike-VM-Node172_31_225_214.com)     11/03/2020     _x86_64_    (1 CPU)

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

    5. Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
    6. 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

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

    9. Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
    10. 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  %idle 99.82。
      %util的值一直在增加,磁盘的利用率越来越高,说明对io操作越来越频繁,对磁盘资源的使用越来越多,这与增加对于io操作的线程是一致的。
      如果 %util 已经 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
      idle大于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 要进行安装如下:
    1. [root@Mike-VM-Node-172_31_225_214 ~]# yum install -y fio
    复制代码
     下面这命令将在指定目录下,生成30个1G文件,是多线程并发执行的:
    1. [root@Mike-VM-Node-172_31_225_214 /tmp]# fio -directory=/tmp/ -name=readtest -direc
    复制代码
    numjobs=30 表示30个并发。
      -rw=可供选择的有read单测读write单测写rw读写同时测randrw随机读写同时测randread单测随机读randwrite单测随机写。
      -runtime=单位是秒,表示测试的总时长。





    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-10 06:58 , Processed in 0.061124 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表