ASP.NET应用程序频繁重启

3
我有一个ASP.NET网站,每天都会在1-2小时内重新启动,因此会话和其他东西都会丢失,用户会抱怨,因为他们打开一个页面并进行20分钟的操作,当他们提交时,会出现一个“很抱歉”的页面。
我没有做任何会导致应用程序重新启动的事情(更改web.config、更改文件,甚至像删除App_Data中的文件夹这样的错误操作也不应该导致重新启动)。
这是否与服务器硬件有关?它的性能不是很强大。

1
我将Sessions从InProc移动到StateServer,因此再也不会有回收问题了。还调整了应用程序的某些部分以节省内存使用。由于编写托管代码,我通常不太关心资源,但从现在开始我会更加注意。 - Alper
8个回答

4

3

IIS中的应用程序池默认情况下会被回收 - 在超时后或达到“n”次请求后。

这是可以预期的,也是正常处理的一部分(尽管可以在应用程序池配置中禁用;IIS6 | IIS7)。

这种情况破坏了您的应用程序,表明您正在使用许多像内存会话之类的东西。考虑将这些移动到数据库支持的实现。除了经受住应用程序池重启和服务器重新启动的考验外,这还可以使您将站点扩展到多个服务器。


2

查看这篇博客文章,了解应用程序域回收的一些可能原因。有很多可能的原因。

如果您无法解决问题,可以将会话状态从进程内切换到会话状态服务器或在数据库中存储会话状态。这两个选项都很容易设置,并且效果相当不错,但会对性能产生影响(我认为大约10-20%)。这里有一篇不错的文章,介绍如何设置会话状态服务器。


1

您确定ASP.NET应用程序实际上已经重新启动了吗?还是您认为这是因为会话丢失等原因导致的?

您的应用程序(和IIS)的会话超时变量是多少?超时的默认值是20分钟,所以我想问一下。您可以在web.config中设置超时时间,如下所示:

<system.web>
    <sessionState timeout="120"/>
</system.web>

但除此之外,IIS本身也有一些地方可以进行设置。在IIS6的情况下,这些地方包括:

  • 虚拟目录属性 > 主目录(选项卡)> 配置(按钮)> 选项(选项卡)> 会话超时
  • 虚拟目录属性 > ASP.net(选项卡)> 认证(选项卡)> Cookie超时

我不确定是否需要同时设置两个,但通常我会将两个设置为与web.config中相同的值。


1

1

由于您提到服务器很小,您可以检查一下工作进程是否消耗了比您在机器配置文件中的processModel设置的更多的内存。这可能会导致重置。


0

事件日志中是否有任何关于重启原因的指示?


0

您的服务器上是否运行了任何反病毒软件?据我所知,对web.config文件进行更改会导致应用程序重新启动,因此在某些情况下,反病毒软件可能会通过web.config文件并更改文件属性,从而导致重置。

请尝试禁用任何反病毒软件或将Web应用程序目录从AV自动扫描中排除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接