当我在Azure上运行一个工作者角色实例,它是在一个共享的主机(如EC2)一个完整的虚拟机运行? 抑或是在一个共享的系统(如Heroku的)运行?
例如,如果我的应用程序启动请求100 GB的内存会发生什么? 将它得到对违反限制(一拉谷歌App引擎)自动干掉,否则会累坏的虚拟机,从而使Azure结构重新启动呢?
难道两个角色曾经在同一个系统上运行?
当我在Azure上运行一个工作者角色实例,它是在一个共享的主机(如EC2)一个完整的虚拟机运行? 抑或是在一个共享的系统(如Heroku的)运行?
例如,如果我的应用程序启动请求100 GB的内存会发生什么? 将它得到对违反限制(一拉谷歌App引擎)自动干掉,否则会累坏的虚拟机,从而使Azure结构重新启动呢?
难道两个角色曾经在同一个系统上运行?
这是一个完全虚拟机,以及分配的资源直接您选择虚拟机的尺寸为主,从1.75GB(小)到14GB(XL),用1-8内核。 还有一个额外的小实例有768MB RAM和共享的核心。 整个VM的大小细节都在这里 。
通过Windows Azure,你的虚拟机分配一个物理服务器上,这是找到这样的服务器,以正确地分配所有的Web或辅助角色实例的织物的责任。 如果你有多个实例,这意味着分配跨越故障域这些虚拟机。
随着你的虚拟机,你不用担心,如果你尝试分配在资源dep't太多被杀害了:它就像有机器,你不能超越那里的东西。
至于在同一系统上运行的两个角色:每个角色都有实例,并与多个实例,正如我上面提到的,您的情况分为故障域。 比如说,如果你有4个实例和2个故障域,这是可能的,你可能对同一个机架(或者同一台服务器)两个实例。
我跑快速测试来检查这一点。 我使用的是具有类似的内存1,75 GB的“小”的实例。 我的代码使用ArrayList
来存储大数组的引用,使这些阵列是不是垃圾收集。 每个阵列是十亿byte
S和一旦被分配我运行一个循环,将每个元素设置为零,然后另一个循环来检查每个元素都是零,以确保内存确实是从操作系统(如果它的事项不能确定分配在C#中,但它的确是用C ++要紧)。 一旦阵列被创建,写入和,它被添加到读ArrayList
。
所以,我的代码成功分配五个这样的阵列和分配第六个的尝试导致System.OutOfMemoryException
。 由于5个十亿字节加上开销肯定是更多的分配给机器,我相信物理内存1.75千兆字节这证明了页面文件的虚拟机启用和行为是一样的平常的Windows Server 2008通过诱导局限性它运行的机器。