0

我们目前正在为预期的大量负载准备 Azure 角色(标准 Web 角色),我们需要知道当前设置消耗了多少内存。为了实现这一点,我们使用负载测试,同时使用GC.GetTotalMemory.

页面http://technet.microsoft.com/en-us/cloud/gg663909.aspx列出了Compute Instance Guaranteed Memory每个实例大小(例如,0.768 GB对于 Extra-Small Instance 和3.5 GBMedium Instance)。

的值是否GC.GetTotalMemory与这些列表中的值相当?换句话说,如果GC.GetTotalMemory显着低于列出的限制,我们能否确定不会由于内存交换而导致任何突然的性能损失?

如果我们达到限制,我们的假设是否正确,即会有一些内存交换(将内存内容写入虚拟硬盘),还是会产生更严重的影响,例如重复的 App Pool 回收?

(最后一个问题出现了,因为如果您达到某些内存限制,大多数共享主机会回收您的应用程序池,但坦率地说,我们不希望 Windows Azure 有这样的事情)

4

2 回答 2

1

此方法只会为您提供进程当前分配的字节。0.768 GB 包括操作系统可用的内存,也可以有虚拟内存。

system.gc.gettotalmemory

要获得总系统内存,您可以使用:

添加对 System.Management 的引用。

private static void DisplayTotalRam()
{
  string Query = "SELECT MaxCapacity FROM Win32_PhysicalMemoryArray";
  ManagementObjectSearcher searcher = new ManagementObjectSearcher(Query);
  foreach (ManagementObject WniPART in searcher.Get())
  {
    UInt32 SizeinKB = Convert.ToUInt32(WniPART.Properties["MaxCapacity"].Value);
    UInt32 SizeinMB = SizeinKB / 1024;
    UInt32 SizeinGB = SizeinMB / 1024;
    Console.WriteLine("Size in KB: {0}, Size in MB: {1}, Size in GB: {2}", SizeinKB, SizeinMB, SizeinGB);
  }
}

代码来源

于 2012-10-16T12:47:53.143 回答
1

要回答您的最后一个问题,Windows Azure 将不碍事,并且分页将像在任何 Windows 服务器上一样发生。

IIS 是否回收您的应用程序池可能取决于您的 IIS 设置,但这些都在您的控制之下。(例如,如果您想更改默认值,您可以在启动任务中运行 appcmd。)

于 2012-10-16T16:10:30.463 回答