云计算之路-阿里云上:“黑色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,详见Linux内核bug引起的“黑色10秒钟”),只要在虚拟机中用到了SpinLock(http://en.wikipedia.org/wiki/Spinlock),并最终使用了xen的pv spinlock(pv=paravirtualization, http://en.wikipedia.org/wiki/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的问题,它是虚拟化技术发展中要解决的一个问题。虚拟化技术是云计算发展的基石,所以我们觉得花时间学习它、研究它、思考它、分享它是有价值的。而且开发人员也越来越离不开它,因为未来的大多数程序都是运行在虚拟机中的。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· autohue.js:让你的图片和背景融为一体,绝了!
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
2012-06-04 上周热点回顾(5.28-6.3)
2010-06-04 博客园电子期刊2010年5月刊发布啦