云计算之路-阿里云上:黑色1秒,微软的问题还是阿里云的问题?

黑色1秒”问题经过一个多月的艰苦奋战,今天终于取得了重要进展!我们终于有了足够的数据证明不是微软IIS的问题,就是阿里云Xen虚拟机的问题。

这篇博文分享的是我们如何进行证明的,而且这次证明连Window性能监视器都不需要。

下面我们来分析一下今天10:37:35出现的“黑色1秒”(下面所用的IIS日志分析工具是Log Parser Studio,这是我们在排查“黑色1秒”问题期间对我们帮助最大的一个工具)。

1. 先从IIS日志中找出哪些时间点发生了“黑色1秒”。

a) 在Log Parser Studio中所用的日志查询语句(查询的是10:00-10:59的IIS日志文件)


SELECT  TO_STRING(TO_LOCALTIME(time), ‘hh:mm:ss‘) as Time, COUNT(time) as Requests
FROM ‘[LOGFILEPATH]‘
GROUP BY TIME
HAVING COUNT(time) < 20

b) 日志查询结果

发生了2次,我们只分析10:37:35这次。

注:IIS是在请求处理完成后将响应内容发给客户端,客户端发来TCP ACK包时才写入日志。

2. “黑色1秒”期间,IIS日志中的记录情况

a) 日志查询语句


SELECT  TO_STRING(TO_LOCALTIME(time), ‘hh:mm:ss‘) as time,cs-method,cs-uri-stem,time-taken
FROM ‘[LOGFILEPATH]‘
WHERE TO_LOCALTIME(time)=‘10:37:35‘

b) 日志查询结果

为什么这12个请求能正常处理?因为这些请求走的是http.sys的kernel-mode缓存(见下图),这证明了在“黑色1秒”期间http.sys工作正常,也从侧面证明了网络层面没问题。

3. “黑色1秒”前后IIS日志中的记录情况

a) IIS日志查询语句


SELECT TO_STRING(TO_LOCALTIME(time), ‘hh:mm:ss‘) as Time, count(time) as Requests
FROM ‘[LOGFILEPATH]‘
WHERE TO_LOCALTIME(time) > ‘10:37:33‘ AND TO_LOCALTIME(time) < ‘10:37:38‘
GROUP BY time

b) 日志查询结果


通过对比“黑色1秒”前后处理的请求量,可以分析出,10:37:35收到的请求,
除了http.sys缓存中有的内容,其他请求都被延迟到10:37:36才被处理。

c) 查询10:37:36日志中time-taken超过1秒的请求

可以推断这些请求是在10:37:35收到的,然后在10:37:36才被处理。

通过1,2,3的分析,我们可以得出结论1:“黑色1秒”是因为请求在http.sys之后的处理环节中被卡住了1秒。

4. 看一下ASP.NET应用程序中的日志情况

在ASP.NET应用程序中我们记录了执行时间超过1秒的请求,代码如下:


public class Global : System.Web.HttpApplication
{
protected void Application_BeginRequest(Object sender, EventArgs e)
{
Context.Items.Add("start-time", DateTime.Now);
}

protected void Application_EndRequest(Object sender, EventArgs e)
{
if (Context.Items["start-time"] != null)
{
var startTime = Convert.ToDateTime(Context.Items["start-time"]);
if (startTime != default(DateTime))
{
var duration = (int)(DateTime.Now - startTime).TotalMilliseconds;
if (duration > 1000)
{
Logger.Default.Info("EndRequest-request-execution-time", duration + "ms", Context);
}
}
}
}
}

如果“黑色1秒”期间,请求已经进入ASP.NET,在应用程序执行过程中卡住了,那么在应用的日志中会记录这些执行时间超过1秒的请求。

查看应用日志的结果是:不仅10:37:36没有记录到有超过1秒的请求,就连10:37:36-10:37:58也没有超过1秒的请求。

由此我们可以得到结论2:“黑色1秒”期间,请求根本没有进入ASP.NET。

5. 分析小结

通过结论1与结论2,我们再次以真实的数据证明了“黑色1秒”的确是发生在http.sys与ASP.NET的中间处理环节。

那谁负责这些中间处理环节呢?——IIS的核心模块(user-mode的非托管代码),比如w3tp->w3dt->iiscore->webengine->wbhst_pm(详见之前的博文“黑色1秒”最新线索——w3tp与w3dt)。

所以,我们对“黑色1秒”问题分析的最终结论是——“黑色1秒”发生IIS的user-mode核心模块

如果用的是物理机,我们会毫无犹豫地将矛头指向微软;但是我们用的是虚拟机,矛头又多了一个指向——阿里云。

考虑到微软IIS的用户要远远远远多于阿里云的用户,仅仅从情理上,矛头也会指向阿里云更多一些。

我们用了10年多的IIS,之前从来没有遇到过IIS的底层问题;而我们仅用了1年多的阿里云,遇到的问题不计其数,仅仅从出问题的概率上,矛头也指向阿里云更多一些。

如果您关注过去年我们在阿里云上遇到“黑色10秒”问题,你会发现,如果把“1秒”改成“10秒”,这两个“黑色”竟然惊人的相似。而当时“黑色10秒”问题只是从表面解决,从Windows
Server 2008 R2升级至Windows Server 2012,阿里云并没有从虚拟化底层去解决。仅仅从曾经的经历,矛头也指向阿里云更多一些。

6. 问题的最终验证

我们想到的最简单但也许是最难的验证方法,其他环境都不变,把虚拟机换成物理机。这只有阿里云可以做到。

7. 建议尝试的临时解决方案

从Windows Server 2012升级至Windows Server 2012
R2,也就是将IIS从8.0升级至8.5,也许可以避开这个问题。这也只有阿里云可以做到。

时间: 2024-12-26 11:21:12

云计算之路-阿里云上:黑色1秒,微软的问题还是阿里云的问题?的相关文章

云计算之路-阿里云上-幸福总是很突然:“黑色1秒”问题解决啦

前几天发生了2件神奇的事情:一是1位园友在阿里云上遇到了和我们一模一样的“黑色1秒”问题:二是阿里云推出了IO优化的基于KVM架构的服务器,据说理论上可以解决“黑色1秒”问题.很巧的是,这2件事情竟然开始于同一天. “黑色1秒”问题是我们在阿里云上遇到的最神妙莫测,也是折磨我们时间最长的一个问题.它于2014年5月8日被发现,一直折磨我们到现在,这一年多我们只能依靠“每天重启应用程序”过着云上的“幸福”生活. (“黑色1秒”最显著的特征:QPS为0) 折磨我们到现在,我们也与之斗争到现在.虽然我

通过阿里云拉取Google云上的镜像

在创建kubernetes集群时需要一些Google云上的镜像国内拉取不了Google 云上的镜像,所以我们想到了阿里云,因为阿里云服务器在美国,所以我们去阿里云上的构建镜像的功能拉取国外的镜像,然后再从阿里云上拉取到本地 话不多说行动起来登陆阿里云找到容器服务 点击管理控制台 点击创建镜像仓库填写仓库信息 这里如果没有绑定github,先去绑定,点击绑定账号,跳转到github,点击一下就ok, 命名空间选择github账号就行,仓库名写你的dockerfile存放的仓库名,没有先去创建 .我

在“云”上做科研,是种什么体验?

如今,做研究的人需要什么? 试管?文献?电脑?如果再来一朵 "云"会怎样? 别误会,并不是让科研人员上天做科研,而是——给他们一朵"中国科技云". <strong>大数据时代呼唤科技云</strong> 以"数据密集型"和"大数据"驱动的科学研究范式带来了科研方法论的变革,正成为科学发现的新引擎. 数据与计算平台已经成为当代科学研究重要的信息基础设施,并且将融汇贯穿于整个科学研究活动的全过程.<s

中小企业及创业团队云上监控方法

创业团队往往人少,强调效率,强调速度,所以一般会选择使用公有云来部署业务,基于云的监控是一个难点,本文讨论创业团队云上监控的方法. 要分享这个题目,是因为前几天我有个朋友,刚好就在一个创业团队,他们的业务初步上线,效果比较好,但是有几次业务出现问题,都是收到用户反馈,然后才去排查,从发现到处理完成,时间已经很长了.经过几次折腾,这时候才意识到监控的重要性. 为了快速解决问题,他们使用了商业监控方案,效果不错,用了一周就完成了系统及业务层面比较全面的监控,能做到业务有问题及时短信.邮件报警,然后快

飞天政务开放体系:数据为中心的云上政务平台与创新生态

在2017云栖大会-南京峰会上,阿里云政府业务架构总监史大治做了题为<飞天政务开放体系与智能服务>的分享.对于政务工作而言,面临着政务服务与政务数据的深度.广度不断上升,丰富的技术和应用不断涌现,业务不断融合,行政能力亟待提升的挑战.而互联网服务渠道的开通,让电子政务的建设,从对内(政府机关)的流程.管理建设,转向对外(人民群众)的服务建设.那么如何理解"政务云"呢?其实可以看做是以数据为中心的,云上政务平台与创新生态.在政务云上,结合阿里云飞天产品的应用,政务智能服务的&

云计算之路-阿里云上:对“黑色n秒”问题的最终猜想——CPU C-states引起的

如果说2013年云计算之路的主题是"踩坑",那么2014年我们希望云计算之路的主题变成"填坑"--当然填坑是阿里云来完成的,我们只是见证曾经的坑坑洼洼变成平坦大道. 15号(周四)晚上我们发现了SLB会话保持的坑,16号晚上阿里云成功定位并进行修复,这两天正式发布后会填平这个坑.这次从踩坑到填坑的过程是最痛快的一次. 接下来我们的目标锁定在"黑色n秒"(刚发现一个英文说法:stuck for x seconds)这个坑我们最多.最神秘.最诡异的坑

云计算之路-阿里云上:什么是“黑色1秒”?

为了更好地分享我们解决"黑色1秒"问题的过程,在这篇博文中我们将专门描述一下"黑色1秒"问题的表现. "黑色1秒"是我们使用阿里云以来继"黑色10秒"之后遭遇的最奇特.最诡异.最难以捉摸.最富有戏剧性的问题. 它有2个最显著的特征: 第一个是最直观的表现,在Windows性能监视器(Performace Monitor)中会出现1秒的ASP.NET Applications -> Requests/Sec(简称QPS)为

云计算之路-阿里云上:消灭“黑色n秒”第一招——不让CPU空闲

昨天对"黑色n秒"问题的最终猜想以失败而告终,从而让我们结束了被动猜想阶段,进入了主动进攻阶段--出招. 今天出第一招--用C#写个小程序,让其在每个CPU核上运行一个线程,不让任何一个CPU核进入空闲(idle)状态,以进一步排除CPU idle引起的"黑色n秒". 在这一招中,借助的最重要的武器是System.Diagnostics.ProcessThread.ProcessorAffinity.通过给ProcessorAffinity设置一个掩码,就可以指定当

云计算之路-阿里云上:消灭“黑色n秒”第二招——给w3wp进程指定CPU核

虽然昨天的第一招失败了,但是从失败中我们学到了与多核CPU相关的Processor Affinity(处理器关联)的知识. 既然我们可以让.NET程序的不同线程运行于指定的CPU核,那是不是也可以让IIS应用程序池的进程w3wp运行于指定的CPU核? 虽然看起来"黑色n秒"似乎与w3wp运行于哪些CPU核没有什么关系,但是我们既然把怀疑对象锁定在CPU,那么任何与CPU相关的线索都不能放过.即使失败,也会满载而归,因为如果没有"黑色n秒"这个问题的驱动,我们根本不会

云计算之路-阿里云上:“黑色1秒”问题与2009年Xen一个补丁的故事

在之前对"黑色1秒"问题的分析博文中,我们将最大嫌疑对象锁定在了Xen,在这篇博文我们将从Xen的角度进行分析.也许有人会问,为什么不知道天多高地多厚地去研究不属于自己范围的问题?只因我们对一个问题的强烈好奇心--究竟是不是我们用Windows的错? 2009年3月20日,来自Intel的Yu Ke通过Xen-dev Mailing List给来自Citrix的Keir Fraser(负责的Xen开发者之一)发了一封邮件,提交了Xen的一个patch--cpuidle: suspend