当前位置:首页 > 技术分析 > 正文内容

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

ruisui884个月前 (01-10)技术分析22

本文来自微信公号“CSDN”(ID:CSDNnews),作者 | 王知无, 责编| 郭 芮。

2019年3月3日凌晨,微博炸锅,有网友反映说阿里云疑似出现宕机,华北很多互联网公司受到暴击伤害,APP、网站全部瘫痪,我自己的朋友圈和微信群里也有好友反馈,刚刚从被窝被叫起来去修Bug,结果发现服务器登不上去了......

凌晨2点37分,阿里云官方回应称:华北2地域可用区C部分ECS服务器等实例出现IO HANG,经紧急排查处理后逐步恢复,此外将根据协议尽快赔偿。并已经全面排查其他地域及可用区,未发现此类情况。

IO HANG

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

阿里云有大量的类似RDS、HybridDB数据库,支持海量数据在线事务(OLTP)和在线分析(OLAP),需要大量的IO读写,而Linux的IO性能将直接影响SQL的执行速度,严重情况下将导致服务器卡死和宕机。

如何监控自己服务器的IO情况呢?本文将带大家详细了解这些常用的命令。

如何监控自己服务器的IO情况?

常用的命令包括:top,iostat和iotop。那么他们都有什么区别,以及如何使用呢?我们一一分解。

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

top命令

top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最"敏感"的任务列表,该命令可以按CPU使用、内存使用和执行时间对任务进行排序,而且该命令的很多特性都可以通过交互式命令。

在Linux下,输入`top` :

Tasks、Cpus、Mem和Swap分别代表了进程信息、CPU信息和内存信息。各个列表示的指标意义如下 :

PID进程id

USER进程所有者用户名

PR 优先级

NI nice值

VIRT进程使用的虚拟内存总量

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

SHR共享内存大小

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

CPUcpu时间统计

MEM 物理内存占比

COMMAND命令行命令名

top常用的交互式命令使用格式:

top [-] [d] [p] [q] [c] [C] [S] [s] [n]

参数说明:

d:指定每两次屏幕信息刷新之间的时间间隔,当然用户可以使用s交互命令来改变之;

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

q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行;

S:指定累计模式;

s:使top命令在安全模式中运行,这将去除交互命令所带来的潜在危险;

i:使top不显示任何闲置或者僵死进程;

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

通过top命令,我们即可查到当前服务器的进程占用CPU和内存情况。

iostat命令

iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

基本使用:

$iostat -d -k 2

参数说明:

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

-k:某些使用block为单位的列强制使用Kilobytes为单位;

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

如果提示没有iostat命令需要使用yum安装,安装命令如下:

`yum install 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变差,轻则写入服务读写响应缓慢,重则导致大量进程长时间挂起,数据库拥堵卡死,服务器严重卡顿,甚至宕机。

作者:王知无,阿里巴巴高级大数据开发工程师,先后在京东,阿里等大型互联网公司从事大数据平台、实时计算和离线计算中间件和业务平台开发。自媒体人,业余讲师,希望为更多的互联网开发人员提供最新和最热的大数据方向的技术动态,技术前沿研究。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/135.html

标签: top res
分享给朋友:

“祸害阿里云宕机3小时的IO HANG究竟是什么?” 的相关文章

Slackware 15.0?发布:历史最久且在维护的Linux发行版本

Slackware 14.0 于 2012 年发布,在经过了数年的等待之后 Slackware 15.0 发行版本于今天正式发布。Slackware 于 1993 年发布,是目前历史最悠久、且仍在维护的 Linux 发行版本。Slackware 15.0 在去年进入测试阶段,在发布几个候选版本之后终...

Linux 最主要的发行分支

Linux 有数百个发行分支。主要的有以下四个。slackwareSlackware 是由 Patrick Volkerding 在 1992 年推出的,它是全球现存最古老的 Linux 发行版。Slackware 被设计为高度可定制和强大的,并且要求用户了解 每个元素,它的包系统是不支持依赖的。...

Beta版Linux Mint“Xia”发行版22.1发布

IT之家 12 月 13 日消息,Beta 版 Linux Mint“Xia” 22.1 昨日(12 月 12 日)发布,新版本基于 Ubuntu 24.04,内核版本为 Linux 6.8,长期支持将持续到 2029 年,为用户提供可靠稳定的使用体验。新版本在软件包管理方面,主要弃用了传统的 ap...

手把手教你Vue之父子组件间通信实践讲解【props、$ref 、$emit】

组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用。那么组件间如何通信,也就成为了vue中重点知识了。这篇文章将会通过props、$ref和 $emit 这几个知识点,来讲解如何实现父子组件间通信。转载链接:https://www.jia...

15款测试html5响应式的在线工具

手机、平板灯手持设备的增多,网站要顺应变化,就必须要做响应式开发,响应式网站最大的特点在于可以在不同设备下呈现不同的布局,是基于html5+css3技术,目前越来越多的网站开始采用了响应式设计,而下面15款工具可以方便测试你的html5响应式效果。Responsinatorhttp://www.re...

22《Vue 入门教程》VueRouter 路由嵌套

1. 前言本小节我们介绍如何嵌套使用 VueRouter。嵌套路由在日常的开发中非常常见,如何定义和使用嵌套路由是本节的重点。同学们在学完本节课程之后需要自己多尝试配置路由。2. 配置嵌套路由实际项目中的应用界面,通常由多层嵌套的组件组合而成。同样地,URL 中各段动态路径也按某种结构对应嵌套的各层...