云计算之路-阿里云上-新发现:又一种与虚拟内存有关的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。
最新文章
- STM8 EEPROM:
- python猜数脚本(电脑猜测)(二分法)
- hdu3065病毒侵袭持续中
- Android自学笔记:环境配置
- 在server 2008/2003中 取消对网站的安全检查/去除添加信任网站
- [wikioi 1418]铃仙•优昙华院稻叶(东方幻想乡系列模拟赛)(树上递推)
- linux命令合集
- html + js 右 点击 弹出 菜单
- windows下几种I/O端口(了解)
- PCA understanding
- 启用DHCP中继代理,实现跨子网服务 - Win 2003 Server
- 移动网络山寨版(OpenBTS)【2】频段的故事
- javascript - 工作笔记 (事件绑定二)
- Nagios的客户端的安装
- Python安装coverage.py
- JavaScript性能优化技巧之函数节流
- 操作系统-实验一、DOS使用命令实验
- Spring03-jdbc
- 秋招提前批小结(CVTE一面挂、阿里三面挂)
- iis访问网络路径映射问题(UNC share)
热门文章
- CentOS7安装和配置dns服务器
- ngCordova安装配置使用教程
- python spyder 今天突然打不开了【已解决】
- 自定义word快捷键,设置插入图片快捷键
- 【BZOJ 1115】【POI 2009】石子游戏Kam
- 2017icpc 乌鲁木齐网络赛
- 【矩阵乘法】Gym - 101412C - One-Dimensional Cellular Automaton
- 【搜索】【约数个数定理】[HAOI2007]反素数ant
- 【SAM】POJ1509-Glass Beads
- 升级到XCode6后,iOS8里设置tableview的setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法