首页天道酬勤祸害阿里云宕机 3 小时的 IO HANG 究竟是个什么鬼?!

祸害阿里云宕机 3 小时的 IO HANG 究竟是个什么鬼?!

admin 12-05 04:04 175次浏览

作者| zzdjm无

编辑|快乐热狗

2019年3月3日凌晨,在微博的炸锅里,有网友爆料称阿里巴巴云疑似瘫痪,华北地区多家互联网公司遭受暴击,所有应用和网站瘫痪。我自己的朋友圈和微信群也有朋友的反馈。刚被从床上叫起来修Bug,发现服务器起不来。

凌晨2点37分,阿里巴巴云官方回应称,iHang出现在华北2区区域可用区C部分ECS服务器等部分实例中,经紧急调查处理后逐渐恢复,将按照约定尽快进行赔偿。对其他地区和可用区域进行了彻底调查,没有发现这种情况。

输入输出挂起

那么问题来了,IO HANG到底是什么?简单来说,服务器磁盘读写太慢,导致线程和进程挂起。大量读写线程/进程挂起,导致服务器宕机。

阿里巴巴云拥有大量类似RDS和HybridDB的数据库,支持海量数据的在线事务处理(OLTP)和在线分析(OLAP),需要大量IO读写。Linux的IO性能会直接影响SQL的执行速度,严重时会导致服务器堵塞和宕机。

如何监控服务器的IO状态?本文将详细介绍这些常用命令。

如何监控自己服务器的IO状态?

常用的命令包括:top、iostat和iotop。那么它们之间有什么区别以及如何使用呢?我们一个一个地分解它。

我安装了CentOS-7的虚拟机,内核信息是:

最高命令

top命令提供系统处理器的实时状态监控。它将显示系统中CPU最“敏感”的任务列表。这个命令可以根据CPU使用情况、内存使用情况和执行时间对任务进行排序,这个命令的很多功能都可以通过交互命令来实现。

在Linux下,输入“top ”:

任务、中央处理器、内存和交换分别代表进程信息、中央处理器信息和内存信息。每一栏所指的指标具有以下含义:

PID进程ID

用户进程所有者用户名

公关优先

倪值不错

virt进程使用的VIRTual内存总量

未换出的RES进程使用的物理内存大小。

共享内存大小

S进程状态S=睡眠T=跟踪R=运行Z=僵尸进程D=不间断睡眠进程

Cpu时间统计

MEM物理记忆比率

时间进程使用的总CPU时间是1/100秒。

命令命令行命令名

常用的交互命令格式:

顶级[-] [d] [p] [q] [c] [C] [S] [s] [n]

参数描述:

d、指定每两次屏幕信息刷新的时间间隔。当然,用户可以使用S交互命令进行更改;

p:只通过指定监控进程ID来监控某个进程的状态;

问:这个选项会毫不延迟地刷新顶部。如果调用者拥有超级用户权限,那么top将以尽可能高的优先级运行;

s:指定累加方式;

s:使顶层命令在安全模式下运行,这将消除交互命令带来的潜在危险;

I:使top不显示任何空闲或死进程;

c:显示整个命令行,而不仅仅是命令名。

使用top命令,我们可以找出当前服务器中进程占用的CPU和内存。

Iostat命令

Iostat主要用于监控系统设备的IO负载。iostat第一次运行时,从系统启动开始就显示各种统计信息。运行iostat后,它将显示自上次运行此命令以来的统计信息。用户可以通过指定统计的次数和时间来获取所需的统计信息。

基本用法:

$iostat -d -k 2

参数描述:

-d:显示设备(磁盘)的使用状态;

-k:一些以块为单位的列强制以千字节为单位;

2:数据显示每2秒刷新一次。

如果没有要用yum安装的iostat命令,安装命令如下:

` yum已安装

l sysstat`

参数解释如下:

tps:该设备每秒的传输次数,一次传输意思是“一次I/O请求”,多个逻辑请求可能会被合并为“一次I/O请求”;

kB_read/s:每秒从设备(drive expressed)读取的数据量;kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;

kB_read:读取的总数据量;

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

上面的例子中,我们可以看到磁盘sda以及它的各个分区的统计数据,当时瞬时统计的磁盘总TPS是1.88,下面是各个分区的TPS(因为是瞬间值,所以总TPS并不严格等于各个分区TPS的总和)。

在实际业务中,我们经常使用的命令是:

iostat -xdm

例如:iostat -xdm 2,2代表2秒钟刷新一次。

我们可以看到,%util这个参数即代表磁盘繁忙程度。100%表示磁盘繁忙, 0%表示磁盘空闲。但是我们需要注意,磁盘繁忙程度并不意味着磁盘读写速度大小。

iostat是系统级别的监控指令,iostat给我们的展示结果揭示了我们当前服务器磁盘的繁忙程度,虽然有一定的指导意义,但是不能精确到进程级别,这时候我们就需要iotop了。

iotop命令

我们上文讲到top命令,顾名思义,iotop代表io版本的top命令,使用起来简单粗暴,直接在命令行敲下:iotop。

iotop命令可以按进程统计IO状况,我们可以指导当前系统哪些进程在占用IO,百分比是多少,占用IO的进程是在读,还是在写,读写量是多少等信息。然后我们可以定位到具体的进程,查看进程详情。

同样个iotop命令有一个很像的命令叫做pidstat,参数很多。

例如:`pidstat -d` :

我们同样可以看到每个进程的读写情况,然后定位到具体的线程去查看问题。

总结

在生产实践中,实时监控我们的服务器IO情况至关重要,尤其是数据库所在的服务器,它直接关系到我们的程序的读写速度、SQL的执行情况等。

服务器IO的情况是我们选择服务器的重要考虑因素之一。IO变差,轻则写入服务读写响应缓慢,重则导致大量进程长时间挂起,数据库拥堵卡死,服务器严重卡顿,甚至宕机。

更换防火墙管理和外网访问配置cdhmanager-cdhmanager是什么
查看服务器性能(数据服务器性能) linux文件系统由什么组成(linux文件系统格式查看)
相关内容