我正在研究IIS应用程序初始化模块,从我所看到的,当使用应用程序池的启动模式设置的AlwaysRunning选项时,基本上它启动了一个新的工作进程,即使没有任何要求。应用此选项时,它会自动启动该过程。
我关注的是内存管理和CPU使用情况,具体是如何处理,因为进程总是运行。
如何将此设置与将开始模式设置为OnDemand并将空闲时间分钟增加到几天?这样,我猜,该进程将在空闲模式下运行x天,然后终止,并在下一个请求中重新初始化并继续运行几天。如果我将会议记录设置为1.5天,则某人必须每天至少使用一次该应用程序,因此它将持续进程运行时并且永远不会被终止。
有人可以分享有关此主题的经验吗?
由于
答案 0 :(得分:2)
我有多站点应用程序,在单独的应用程序池下运行少量站点。所有都设置为OnDemand for Start Mode和IdleTime 1740分钟,我也使用app Output Cache来自不同页面类型的不同时间。场景后面还有NHibernate,而DB是MySql。
最活跃的网站每天访问量超过10万,而且几乎从不闲置。当我开始循环时,需要30秒到2分钟才能完全可操作,具体取决于此刻的请求和CPU使用率从40%到70%。站点启动后,如果DB中没有新条目,则CPU使用率非常低(0-4%),并且当缓存全部内存时,内存使用率约为3GB。如果当时是新请求(对于未缓存的内容)并且有新的条目保存,有时CPU将达到20%。 页面输出缓存也适用于First Come First Served基础,因此在缓存完成时也许这也可能导致很少的问题 - 用户必须等待,更多的CPU才能进行缓存。
我的案例中最大的问题是使用NHibernate和MySql,但是当我决定缓存页面模块和内容时,Page Output Cache解决了我的问题。我意识到这是更好的应用程序,饿死内存然后CPU。 一切都被缓存的3.5k访问者给了我相同的内存使用量(3GB)和CPU(服务器整体)大约40% 其他网站使用大约1-1.5GB的内存,CPU在启动时从不超过20%。 具有相同设置的应用程序池和使用MSSQL与EF的应用程序我甚至不会注意到在服务器上运行。它被10-60位用户在分钟使用,除了嵌入代码之外没有太多内容,它使用1-5%的CPU,从不超过8MB的内存。在回收时,它会持续不到10秒钟。
根据我的经验,我可以告诉你,一切都取决于应用程序的服务和工作方式:)以及你有多少内容。
如果使用具有长IdleTime的OnDemand,它将与AlwaysStart相同,并且此时不使用进程。如果您经常使用OnDemand和较短的IdleTime,则需要CPU来启动该过程。