我最近在 WinHost.com 上租用了一些共享空间(基本套餐)。我部署了一个使用 NHibernate 的 ASP MVC3 应用程序。这是一个非常精简的应用程序,我已经对它的内存泄漏进行了分析,在我的本地 IIS 6.1 上,我从来没有遇到过问题。
但是,部署到 WinHost 后,应用程序池会不断回收。他们的支持人员表示,Basic 包提供的最大应用程序池大小为 100M。我在他们的 Max 包上运行了相同的应用程序代码,支持人员告诉我,它使用了 200MB 限制中的 130MB。
在我运行并将 Basic 软件包升级到 Max 之前,有人知道这是否是轻量级 ASP MVC 应用程序的典型大小吗?它不使用会话或缓存,并且页面非常薄。在我看来,您无法在其基本软件包上运行单个 ASP 应用程序似乎很奇怪。它们是专为静态网站设计的吗?
答案1
这很难预测。我见过轻量级 MVC 应用,其中单个工作进程消耗 12-1300 MB 内存(是的,1.3 GB)。
您可能知道,.NET CLR 是围绕 2 阶段编译模型构建的,这意味着您的预编译程序集仍需要从 MSIL(Microsoft 的通用中间语言实现)转换为机器代码。首次向 IIS 应用程序发出请求时,将解析和编译所有页面,并将结果缓存在进程的内存中。
因此,您的实际输出可能不会那么“重”,但该过程仍然需要为已编译的程序集和从全局程序集缓存加载的所有依赖程序集分配内存。
此外,它还取决于很多因素,而不仅仅是应用程序本身。当应用程序的请求队列中有 10 个请求时,与有 1000 个请求时相比,应用程序消耗的内存有很大差异(即使每个请求占用的内存很少)。
对我来说,100MB 的限制听起来有点太严格了
答案2
您的平台和供应商的平台位数是否相同?我发现在 x64 上运行应用程序时,内存使用量与 x86 相比会增加,如果对象很多,内存使用量可能会翻倍。