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

Dej*_*ski 5 iis initialization

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

我关心的是内存管理和CPU使用情况,具体是如何处理,因为进程总是运行.

如何将此设置与将启动模式设置为OnDemand并将空闲时间分钟增加到几天?这样,我猜,该进程将在空闲模式下运行x天,然后终止,并在下一个请求中重新初始化并继续运行几天.如果我将分钟设置为让我们说1.5天,那么某人必须每天至少使用一次该应用程序,因此它将持续进程运行时并且永远不会被终止.

有人可以分享有关此主题的经验吗?

谢谢

Gjo*_*iev 2

我有多站点应用程序,在单独的应用程序池下运行几个站点。所有启动模式均设置为 OnDemand,空闲时间设置为 1740 分钟,我还使用应用程序中的页面输出缓存,针对不同的页面类型设置不同的时间。后台还有NHibernate,DB是MySql。

最活跃的网站每天的访问量超过 10 万,而且几乎从不闲着。当它启动时,如果我回收,需要 30 秒到 2 分钟才能完全运行,具体取决于当时的请求,CPU 使用率从 40% 到 70%。站点启动后,如果数据库中没有新条目,则 CPU 使用率非常低 (0-4%),而当所有条目都被缓存时,内存使用率约为 3GB。有时,如果此时有新请求(针对未缓存的内容)并且有新条目保存,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 秒。

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

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