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=不可中断的睡眠进程
CPU     cpu时间统计
MEM     物理内存占比
TIME+   进程使用的CPU时间总计 单位1/100秒
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变差,轻则写入服务读写响应缓慢,重则导致大量进程长时间挂起,数据库拥堵卡死,服务器严重卡顿,甚至宕机。

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

http://www.fx126.top/share-core/wx/2019-03-06/0e3ec6b2-2191-4935-937f-48ab4a81a4c0/b.html

祸害阿里云宕机 3 小时的 IO HANG 究竟是个什么鬼?!的更多相关文章

  1. 阿里云堡垒机密钥连接ECS服务器

    文:铁乐与猫 2017-6月中旬 堡垒机远程桌面windows系统就不用细说了 堡垒机远程ssh连接linux系统倒要说一下,毕竟是为安全一般只用通过密钥连接,而不使用密码的方式连接. 首先我们得在需 ...

  2. 云计算之路-阿里云上:基于Xen的IO模型进一步分析“黑色0.1秒”问题

    在发现云服务器读取OCS缓存的“黑色0.1秒”是发生在socket读取数据时,而且是发生在读取开始的字节,甚至在socket写数据时(比如写入缓存key)也会出现超过50ms的情况,我们的好奇心被激发 ...

  3. CDH6.1.1阿里云安装实践

    概念介绍 CDH概览 CDH是Apache Hadoop和相关项目的最完整.最受测试和最流行的发行版.CDH提供Hadoop的核心元素-可伸缩存储和分布式计算-以及基于web的用户界面和重要的企业功能 ...

  4. 国外vps品牌vultr宣布100%可用,宕机加倍补偿

    全球知名的vps品牌vultr最近发狠招了,宣布所有vps服务器保证100%上线可用.如果出现宕机故障,提供加倍补偿方案.没有一家vps敢声称自己的产品100%可用,行业标准99.99%上线率已经是非 ...

  5. (转)从史上八大MySQL宕机事故中学到的经验

    一.Percona网站宕机事件 震级:3 发生时长:2011年7月11日 持续时长:数日 地点:加州Pleasanton(幸福屯) 宕机原因:Percona网站主服务器上的3块硬盘损坏,同时因为人员变 ...

  6. MySQL - 高可用性:少宕机即高可用?

    我们之前了解了复制.扩展性,接下来就让我们来了解可用性.归根到底,高可用性就意味着 "更少的宕机时间". 老规矩,讨论一个名词,首先要给它下个定义,那么什么是可用性? 1 什么是可 ...

  7. 云计算之路-阿里云上:重启 manager 节点引发 docker swarm 集群宕机

    为了迎接春节假期后的访问高峰,我们今天对 docker swarm 集群进行了变更操作,购买了1台阿里云4核8G的服务器作为 worker 节点,由原来的  3 manager nodes + 2 w ...

  8. 云计算之路-阿里云上:3个manager节点异常造成 docker swarm 集群宕机

    今天 11:29 - 11:39 左右,docker swarm 集群 3 个 manager 节点同时出现异常,造成整个集群宕机,由此给您带来很大的麻烦,请您谅解. 受此次故障影响的站点有:博问,闪 ...

  9. Cloud Native Weekly |面对云平台宕机,企业如何止损

    KubeEdge v0.2发布 KubeEdge在18年11月24日的上海KubeCon上宣布开源的一个开源项目,旨在依托K8S的容器编排和调度能力,实现云边协同.计算下沉.海量设备的平滑接入. Ku ...

随机推荐

  1. django天天生鲜项目

    .后台admin管理天天生鲜商品信息 models里 from django.db import modelsfrom tinymce.models import HTMLField #需要pip安装 ...

  2. 1.mysql安装

    Navicat账号:root 密码:weihu 账号:weihu 密码:weihu 1.首先进入的是安装引导界面 2.然后进入的是类型选择界面,这里有3个类型:Typical(典型).Complete ...

  3. jQuery WeUI V0.4.2 发布

    http://www.oschina.net/news/71590/jquery-weui-v0-4-2 jQuery WeUI V0.4.2 发布了! jQuery WeUI 中使用的是官方WeUI ...

  4. docker - 从安装到部署一个web应用(go、java)

    一:安装docker 1.https://docs.docker.com/engine/installation/binaries/ 下载docker最新版二进制tar.gz linux下: wget ...

  5. 经过实际验证的C#调用Haskell的方法

    [系统环境] Windows Server 2008 R2,Haskell Platform 2013.2.0.0,ghc 7.6.3,cabal 1.16.0 [操作步骤] 1. 安装Windows ...

  6. android.os.NetworkOnMainThreadException的解决方案

    06-24 18:04:36.857: E/AndroidRuntime(22251): FATAL EXCEPTION: main 06-24 18:04:36.857: E/AndroidRunt ...

  7. Sql Server中的表访问方式Table Scan, Index Scan, Index Seek

    1.oracle中的表访问方式 在oracle中有表访问方式的说法,访问表中的数据主要通过三种方式进行访问: 全表扫描(full table scan),直接访问数据页,查找满足条件的数据 通过row ...

  8. Fiddler工具使用介绍二

    在上一篇中介绍了Fiddler的基本使用方法.通过上一篇的操作我们可以直接抓取浏览器的数据包.但在APP测试中,我们需要抓取手机APP上的数据包,应该怎么操作呢? Andriod配置方法: 1)确保手 ...

  9. 套接字:Socket

    在进行通信之前,一般要先建立Socket连接,Socket编程是端到端的通信,往往意识不到中间经过了多少局域网,多少路由器,他能操作的是端到端协议之上的网络层和传输层. 在网络层,Socket函数可以 ...

  10. java filter过滤器及责任链设计模式

    什么是Filter? Filter属于sevlet规范,翻译为过滤器. Filter在web开发中有什么作用? 案例一:一个web站点只有用户登录才能继续访问该站点的资源,那么需要用户每次访问都判断是 ...