IIS应用程序初始化模块和内存管理

IIS application initialization module and memory management

我正在研究 IIS 应用程序初始化模块,据我所知,当为应用程序池的启动模式设置使用 AlwaysRunning 选项时,基本上它会启动一个新的工作进程,该进程将始终 运行即使没有任何请求。应用此选项时,它会自动启动该过程。

我关心的是内存管理和 CPU 使用,特别是如何处理,因为进程总是 运行s。

如何将此与将启动模式设置为按需并将空闲时间分钟数增加到几天进行比较?这样,我猜,该进程将 运行 在终止前 x 天处于空闲模式,并在下一个请求时重新初始化并保持 运行ning 几天。如果我将分钟设置为 1.5 天,那么某人必须每天至少使用该应用程序一次,因此它将持续 运行time 并且永远不会终止。

有人可以分享关于这个主题的经验吗?

谢谢

我有一个多站点应用程序,运行几个站点位于单独的应用程序池中。启动模式和空闲时间都设置为 OnDemand 1740 分钟,我还使用来自应用程序的页面输出缓存,不同时间用于不同的页面类型。幕后还有 NHibernate,DB 是 MySql.

最活跃的站点每天访问量超过 10 万次,几乎从不闲置。如果我回收,当它开始时,需要 30 秒到 2 分钟才能完全运行,具体取决于目前的请求,CPU 使用率从 40% 到 70%。站点启动后 CPU 如果数据库中没有新条目并且内存使用量在 3GB 左右(缓存所有内容),则使用率非常低 (0-4%)。有时 CPU 会达到 20%,如果此时有新请求(对于未缓存的内容)并且有新的条目保存。 此外,页面输出缓存在先到先得的基础上工作,因此在缓存完成时这也可能导致小问题 - 用户必须等待,再 CPU 进行缓存。

在我的案例中最大的问题是使用 NHibernate 和 MySql,但是当我决定缓存页面模块和内容时,页面输出缓存为我解决了这个问题。我意识到比 CPU 更好的应用程序是为了内存而饿死。 3.5k 访问者在缓存所有内容时给我相同的内存使用量 (3GB) 和 CPU(服务器整体)大约 40% 其他站点使用大约 1-1.5GB 内存,CPU 开始时从不超过 20%。 具有相同应用程序池设置并使用 MSSQL 和 EF 的应用程序我什至没有注意到服务器上的 运行。它在一分钟内被 10-60 个用户使用,除了嵌入代码外没有太多内容,它使用 1-5% CPU 并且从不超过 8MB 内存。在回收时它会持续不到 10 秒。

根据我的经验,我可以告诉您,这一切都取决于应用程序提供的服务及其工作方式 :) 以及您拥有多少内容。

如果您使用长空闲时间的 OnDemand,它将与 AlwaysStart 相同,并且此时不使用进程。如果您更频繁地使用 OnDemand 和较短的 IdleTime,您将需要 CPU 来启动该过程。