当我在Azure上运行辅助角色实例时,它是否是在共享主机(如EC2)中运行的完整VM?或者它是在共享系统(如Heroku)中运行的?
例如,如果我的应用程序开始请求100 GB内存会发生什么?它是否会因违反限制而被自动杀死(App la Google App Engine),还是会耗尽虚拟机,以便Azure结构重新启动它?
两个角色是否在同一系统中运行?
答案 0 :(得分:10)
这是一个完整的虚拟机,分配的资源直接基于您选择的虚拟机的大小,从1.75GB(小)到14GB(XL),1-8核。还有一个带有768MB RAM和共享内核的Extra Small实例。完整VM大小详细信息为here。
使用Windows Azure,您的VM将在物理服务器上分配,并且结构负责找到此类服务器以正确分配您的所有Web或辅助角色实例。如果您有多个实例,则意味着在故障域中分配这些VM。
使用你的虚拟机,如果你尝试在资源中分配太多资源,你不必担心会被杀死:它就像拥有一台机器一样,你不能超越那里的东西。
至于在同一系统上运行的两个角色:每个角色都有实例,并且有多个实例,如上所述,您的实例被划分为错误域。例如,如果您有4个实例和2个故障域,则可能在同一个机架(或可能是同一台服务器)上有两个实例。
答案 1 :(得分:3)
我跑了一个快速测试来检查这个。我正在使用一个“小”实例,其内存大小为1,75千兆字节。我的代码使用ArrayList
来存储对大型数组的引用,以便不对这些数组进行垃圾回收。每个数组是10亿byte
s,一旦分配,我运行一个循环,将每个元素设置为零,然后另一个循环检查每个元素是否为零,以确保内存确实是从操作系统分配的(不是确定它是否在C#中很重要,但确实在C ++中很重要)。创建,写入和读取数组后,它将添加到ArrayList
。
所以我的代码成功分配了五个这样的数组,并尝试分配第六个数组导致System.OutOfMemoryException
。由于50亿字节加上开销肯定超过了分配给该机器的1,75千兆字节的物理内存,我相信这证明在VM上启用了页面文件,其行为与通常的Windows Server 2008上的行为相同,具有由它正在运行的机器。