我最近使用 Asp.net MVC 4、Ninject、EF Poco、SQL 2008、Auto Mapper 开发了 MVC 应用程序,并托管在 winhost 共享托管服务器中。我的问题是会话到期。两个或三个寄托请求应用程序池被回收。
请参阅下面的支持团队回复
我们在其独特的应用程序池/进程中托管每个网站。为确保服务器稳定性,如果满足以下任一条件,我们会回收应用程序:
1) 超过 20 分钟的空闲时间(20 分钟内没有 http 请求) 2) 应用程序使用超过 100 MB 内存 3) 应用程序使用超过 70% 的 CPU 资源超过 3.5 分钟
我检查了我们的服务器日志,确实发现了许多条目,其中您的应用程序池被回收,因为它开始消耗超过 100 MB 的服务器内存。以下是示例日志条目:
TimeGenerated:2012 年 9 月 5 日晚上 10:03:36 消息:服务应用程序池“customerPool_42717”的进程 ID 为“30088”的工作进程已请求回收,因为它已达到其私有字节内存限制。
TimeGenerated:2012 年 9 月 5 日晚上 10:02:36 消息:服务应用程序池“customerPool_42717”的进程 ID 为“315060”的工作进程已请求回收,因为它已达到其私有字节内存限制。
不幸的是,日志没有告诉我们您的应用程序正在做什么导致它消耗超过 100 MB 的服务器内存,它只记录它确实达到了内存限制。
出于安全和性能原因,我们不允许在共享主机环境中监控服务器资源。您可能想要评估您的应用程序在开发环境中使用的内存量,如果要求小于 200MB,最简单的解决方案是将您的帐户升级到 WinHost Max 帐户,这将增加您的可用内存量工作进程到 200MB 或具有 300MB 专用 RAM 的 WinHost Ultimate 计划。
如果无法升级您的帐户,您可能需要考虑使用 SQL Server 会话状态管理,因为您已经创建了一个数据库,有关更多信息,请花点时间查看以下 WinHost 知识库文章:
http://support.winhost.com/KB/a626/how-to-enable-aspnet-sql-server-session-on-your-web.aspx
如果您想安装架构,请告诉我。请注意,sql 会话不会阻止您的应用程序池自动回收,而只会在回收发生时保留会话。
你能建议如何克服这个问题吗?