阿里云上:“黑色10秒钟”的新进展

云计算
“黑色10秒钟”是一种故障特征,每次发生时都持续10秒钟。在这10秒钟期间,IIS只接收请求,不响应请求,等10秒钟一过,这些未响应的请求会一起响应。如果你在“黑色10秒钟”的第1秒访问网站,要等10秒钟之后才能看到页面。

什么是“黑色10秒钟”?

“黑色10秒钟”是一种故障特征,每次发生时都持续10秒钟。在这10秒钟期间,IIS只接收请求,不响应请求,等10秒钟一过,这些未响应的请求会一起响应。如果你在“黑色10秒钟”的第1秒访问网站,要等10秒钟之后才能看到页面。

“黑色10秒钟”发生的场景

问题发生于安装了Windows Server 2008 R2的阿里云云服务器上(宿主机是Linux/Xen),在Linux云服务器上不会出现(因为阿里云在Linux虚机的内核中禁用了CONFIG_PARAVIRT_SPINLOCKS)。

引发“黑色10秒钟”的原因

由于Linux内核Xen部分对SpinLock处理的bug(Linux 3.2.0-39.62已修复该bug),只要在虚拟机中用到了SpinLock,并最终使用了xen的pv spinlock(pv=paravirtualization,),进行了hypercall调用,就有引发“黑色10秒钟”的可能。

而在IIS 7.5的WAS(Windows Process Activation Service)中的确用到了SpinLock,可以从WAS进程的堆栈信息中知晓(见下图)。

 

 

“黑色10秒钟”的解决思路

1. 从虚拟机层面

对于Linux虚拟机,可以通过修改Linux内核(禁用CONFIG_PARAVIRT_SPINLOCKS)或者升级至Linux 3.2.0-39.62解决问题。

对于Windows虚拟机(Windows Server 2008 R2),除了微软,没有人可以让WAS不使用SpinLock,***可以寄希望的就是微软在Windows Server 2012的IIS8中放弃了SpinLock的使用(胡思乱想一下,也许微软的Hyper-V也面临过这个虚拟化的问题)。

2. 从宿主机层面

升级宿主机的Linux/Xen。

“黑色10秒钟”的解决尝试

昨天晚上,我们将虚拟机中的Windows换成了Windows Server 2012进行测试,惊喜地发现:

 

 

不见SpinLock的身影!在Windows Server 2012的IIS8中,WAS没有使用SpinLock。也就是说在Windows Server 2012中不会出现“黑色10秒钟”。

我们对“黑色10秒钟”问题的看法

“黑色10秒钟”问题不仅仅是阿里云的问题,不仅仅是Linux/Xen的问题,也不仅仅是Windows的问题,它是虚拟化技术发展中要解决的一个问题。虚拟化技术是云计算发展的基石,所以我们觉得花时间学习它、研究它、思考它、分享它是有价值的。而且开发人员也越来越离不开它,因为未来的大多数程序都是运行在虚拟机中的。

原文链接:http://www.cnblogs.com/cmt/archive/2013/06/01/3112725.html

责任编辑:王程程 来源: 博客园
相关推荐

2023-07-17 10:21:25

TC39JavaScript

2014-06-17 09:58:15

容器Google

2020-07-02 16:00:53

​Flutter桌面应用代码

2021-09-14 10:03:35

RustLinux开发工作

2012-11-19 10:50:39

思杰CloudStack开源

2012-11-19 10:37:57

思杰OpenStack

2015-11-12 09:27:13

C++最新进展

2009-09-25 09:27:33

Ubuntu 2010最新进展Lucid Lynx

2018-07-23 15:26:02

Java框架应用程序

2021-09-16 10:15:56

Linux内核Rust

2017-02-22 18:15:31

AI谷歌

2019-11-15 10:11:03

人工智能埃博拉技术

2021-11-12 20:59:21

数字人民币数字货币区块链

2017-02-17 13:38:40

2022-03-02 09:53:51

微软FlutterEngine PR

2011-11-23 09:25:15

KinectWindows

2012-02-09 09:49:48

2023-04-06 07:30:02

2022-06-22 06:42:35

美团业务FlinkSQL数仓
点赞
收藏

51CTO技术栈公众号