云计算之路-阿里云上-新发现:又一种与虚拟内存有关的CPU波动情况
在云上真是无奇不有,昨天偶然间发现在IIS的应用程序池回收设置中,仅仅设置了一下基于虚拟内存限制的回收,就引发了CPU有规律的波动。在这篇博文中,我们将向大家汇报一下云计算之路上的这个小发现。
在之前我们使用阿里云云服务器(虚拟机)遇到一个左右为难的情况:
- 如果开启虚拟内存页面交换文件,会造成CPU占用高,在高并发情况下会引发CPU 100%、系统无响应的故障,详见云计算之路-阿里云上:启用Windows虚拟内存引发的CPU 100%故障。
- 如果关闭虚拟内存页面交换文件,在某种因素引起的短时间虚拟内存不够用的情况下,会造成Windows自动重启,详见云计算之路-阿里云上:禁用Windows虚拟内存引发的重启。
当时通过增加物理内存(8G->16G)临时解决了问题,但这不是长久之计,不仅谁为这个额外的成本买单是个问题(阿里云的内存性价比本来就不高),而且即使16G内存也不能保证不会出现虚拟内存不够用的情况。
于是,我们把焦点转向了如何在8G内存的情况下避开这个问题。我们的应用程序所用的单个w3wp进程在访问高峰期会消耗2G左右的内存,由于设置了Web Garden使用了2个工作者进程,所以在访问高峰期总共大约消耗5G左右的内存。这样可能在瞬间大并发与GC回收的双重条件下,会出现虚拟内存不够用的情况。针对这样的情况,我们采取了两个措施:
- 取消Web Garden,只用1个w3wp。
- 设置应用程序池回收策略,在w3wp进程消耗的内存达到一定值时,强制进行回收。
应用程序池回收策略设置见下图:

从上图可以看出,回收策略就是当w3wp进程消耗的虚拟内存超过6G时,强制回收。
当我们这样设置后,在Windows性能监视器中发现了一个很奇怪的现象(当时w3wp只占用500M不到的内存),见下图:

CPU占用过一会儿就跳上去,而且跳动时会造成系统响应速度慢,打开页面时都能感觉到。
而只要我们一取消应用程序池回收中的这个虚拟内存设置,CPU就立即恢复正常。

只要加上虚拟内存设置,CPU就又开始跳。
你说奇怪不奇怪,如果在阿里云虚拟机中,虚拟内存的确与CPU占用存在某种关联,但现在仅仅是设置了虚拟内存限制,并没有触发这个限制。
我们想到现在,唯一能有点说得通的猜想就是:设置了虚拟内存限制之后,IIS会定期检查w3wp进程的虚拟内存占用情况,检查时会调用虚拟内存相关的Win32 API,这个调用最终转入虚拟机的底层实现(Xen)时出了问题,从而造成CPU波动。
联想到启用虚拟页面交换文件也会造成CPU波动的情况,我们猜想阿里云所用的Xen虚拟机在对Windows虚拟内存的虚拟化实现方面可能存在某种bug。
云计算之路-阿里云上-新发现:又一种与虚拟内存有关的CPU波动情况的更多相关文章
- 云计算之路-阿里云上:从ASP.NET线程角度对“黑色30秒”问题的全新分析
在这篇博文中,我们抛开对阿里云的怀疑,完全从ASP.NET的角度进行分析,看能不能找到针对问题现象的更合理的解释. “黑色30秒”问题现象的主要特征是:排队的请求(Requests Queued)突增 ...
- 云计算之路-阿里云上:Web服务器遭遇奇怪的“黑色30秒”问题
今天下午访问高峰的时候,主站的Web服务器出现奇怪的问题,开始是2台8核8G的云服务器(ECS),后来又加了1台8核8G的云服务器,问题依旧. 而且3台服务器特地使用了不同的配置:1台是禁用了虚拟内存 ...
- 云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障
3月21日,由于使用阿里云服务器自建 docker swarm 集群的不稳定,我们将自建 docker swarm 集群上的所有应用切换阿里云容器服务 swarm 版(非swarm mode). 3月 ...
- 云计算之路-阿里云上:启用Windows虚拟内存引发的CPU 100%故障
今天上午11:35~11:40左右,由于负载均衡中的两台云服务器CPU占用突然飚至100%,造成网站5分钟左右不能正常访问,请大家带来了麻烦,请谅解! (上图中红色曲线表示CPU占用) 经过分析,我们 ...
- 云计算之路-阿里云上:SLB会话保持的一个坑
冒着被大家厌烦的风险,今天再发一篇“云计算之路-阿里云上”.这是在前一篇发过之后真实发生的事情,我们觉得定位问题的过程值得分享.而且估计园子里不少朋友被这个问题骚扰过,我们有责任让大家知道问题的真正原 ...
- 云计算之路-阿里云上:原来“黑色0.1秒”发生在socket读取数据时
在昨天的博文(云计算之路-阿里云上:读取缓存时的“黑色0.1秒”)中我们犯了一个很低级的错误——把13ms算成了130ms(感谢陈硕发现这个错误!),从而对问题的原因作出了错误的推断,望大家谅解! 从 ...
- 云计算之路-阿里云上:禁用Windows虚拟内存引发的重启
昨天(2013年8月6日)下午,承载www.cnblogs.com主站的两台云服务器分别自动重启了1次,由于这两台云服务器使用了负载均衡(SLB),重启并未影响网站的正常访问. 与这次重启相关的Win ...
- 云计算之路-阿里云上:OCS问题的进展以及11:30-11:50遇到的问题
(上图是今天出问题期间Web服务器性能监控图,紫色表示的是Request Execution Time) 昨天我们发布了一篇博客分享了我们这两天遇到的OCS(开放缓存服务)问题,详见云计算之路-阿里云 ...
- 云计算之路-阿里云上:愚人节被阿里云OCS愚
今天是愚人节,而我们却被阿里云OCS愚,很多地方的缓存一直不过期,造成很多页面中的数据一直不更新.这篇博文将向您分享我们这两天遇到的OCS问题. 阿里云OCS(Open Cache Service)是 ...
随机推荐
- 每一对顶点间最短路径的Floyd算法
Floyd思想可用下式描述: A-1[i][j]=gm[i][j] A(k+1)[i][j]=min{Ak[i][j],Ak[i][k+1]+Ak[K+1][j]} -1<=k<=n ...
- 洛谷P2224 [HNOI2001] 产品加工 [DP补完计划,背包]
题目传送门 产品加工 题目描述 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时 ...
- AutoHotKey 常用脚本
; IMPORTANT INFO ABOUT GETTING STARTED: Lines that start with a ; semicolon, such as this one, are c ...
- BestCoder Round #65 (ZYB's Premutation)
ZYB's Premutation Accepts: 220 Submissions: 983 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- Spring事务传播性
事务是逻辑处理原子性的保证手段,通过使用事务控制,可以极大的避免出现逻辑处理失败导致的脏数据等问题.事务最重要的两个特性,是事务的传播级别和数据隔离级别.传播级别定义的是事务的控制范围,事务隔离级别定 ...
- UML对象图、包图
对象图(Object Diagram)显示了一组对象和他们之间的关系.使用对象图阿狸说明数据结构,类图中的类或组件等实例的快照.对象图和类图一样,反应了系统的静态过程,但它是以实际的或原型化为基础来表 ...
- 【转】python assert用法
1.assert语句用来声明某个条件是真的.2.如果你非常确信某个你使用的列表中至少有一个元素,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句.3 ...
- 【20181023T2】行星通道计划【二维BIT】
题面 [错解] 唉好像有规律啊(x2>x1,y2>y1) 唉好像是个偏序啊 然后上CDQ套树状数组 唉怎么大样例跑了十多秒啊 可能有问题吧-- 刷刷刷把T3写了,回来 唉怎么写了个memc ...
- [Lydsy1805月赛] quailty 算法
稍微建一下模型就可以发现,题目要求的其实是一个最小异或基环森林.... 可以用类似最小生成树的拟阵性质来证明,贪心的从小的边权开始依次尝试加入的方法是对的. 所以我们把a[]排完序之后直接递归贪心就行 ...
- 【动态规划】【线段树】 Codeforces Round #426 (Div. 1) B. The Bakery
给你一个序列,让你划分成K段,每段的价值是其内部权值的种类数,让你最大化所有段的价值之和. 裸dp f(i,j)=max{f(k,j-1)+w(k+1,i)}(0<=k<i) 先枚举j,然 ...