2011-08-08 53 views
3

我们的会话设置为120分钟后超时。然而,最近,其中一台生产服务器遇到了很多问题。由于我无法访问服务器盒本身,因此我正在处理有限的信息。我们有两台服务器用于部署我们的网站。 Sever A在任何时候都能正常工作,但服务器B不断有这些过期的会话问题。这是最近的一次,就像过去两周一样。ASP.NET 3.5:什么会导致会话提前超时?

我知道我没有提供足够的信息来直接查明问题,但是有些问题可能会导致会话被重置而没有韵或理由?

+0

您使用某种负载平衡吗? – canon

回答

4

显然,我修复了它。我并排打开了两台服务器的IIS7应用程序池高级设置,并注意到一个区别:Regular Time Interval设置在服务器A上为5,在服务器B上为1740.我将服务器A的设置更改为1740(默认设置),问题立即停止。

奇怪的是,当服务器管理员回退到一个月前时,这开始发生了。不知何故,某些东西被抬高了,这些设置必须已经改变。

尽管我仍然不完全理解我做了什么修正了事情,要么是巧合,要么是低5分钟的设置是问题。

如果有人在意这点,那么一定要这样做。

1

应用程序池可能由于多种原因之一而被回​​收。有许多的设置,并超过其中任何会导致ASP.NET回收:

  1. 回收工作进程(分钟)
  2. 回收工作进程(在请求)
  3. 回收工作进程在以下时间
  4. 最大虚拟内存
  5. 最大使用的内存

如果您正在使用的进程内会话状态,会话如果应用程序池回收,则会丢失。

如果没有更改设置,很可能是由于内存泄漏(这可能不是真正的泄漏,但是应该释放时保留的引用)导致的内存问题。

你说你在使用两台服务器。如果会话状态丢失,这听起来像你正在使用进程内会话状态。在这种情况下,我认为你正在使用'sticky sessions'进行负载平衡(后续的请求到达同一个服务器)?

如果我错了,并且您正在使用共享状态(例如SQL Server会话状态提供程序或状态服务器),是否可能是服务器上的时钟不同步?

+0

是的,两个负载平衡的服务器。我从来没有听说过“进程内”会话,但它使用服务器内存作为会话而不是数据库表。我将不得不对1-3项进行更多的研究,但对于第4项和第5项,这些是基于硬件和/或操作系统配置还是基于web.config中的设置?换句话说,如果服务器有8GB内存,web.config中是否有最大虚拟/已用内存设置可以覆盖该设置? – oscilatingcretin

0

最近有什么新的网站放在您的服务器上? 我们在转移到.net 4时遇到了这个问题,并没有考虑为新的.net 4站点创建一个新的应用程序池(作为与.net 2/3.5相反的站点)。 这导致应用程序池不断重启,因为它们无法在同一应用程序池下运行。

你是否也上传了任何可能让自己停留在循环中的新代码,这也可能导致应用程序池崩溃,导致会话重新启动?

另一个想法..你有任何更新等待安装在这台服务器..这也造成了无法解释的问题。

1

几件事情浮现在脑海中:

正如@Steve摩根说,如果使用过程中会和“粘”会话,那么它可以通过在负载均衡的问题引起的。当负载均衡时,会话应始终处于进程外,因为坦率地说,“粘滞”并不意味着会话不会在两台机器之间反弹。这只是意味着它不太可能。如果负载平衡器超载,则用户将被发送到与第一个不同的服务器。

应用程序池回收是会话丢失的另一个原因;再次由于使用进程内会话管理。如果你搬出去处理它会隐藏的问题。这里真正的问题虽然需要调查,因为它几乎总是由不好的代码造成的。我的猜测是你有问题的组合。首先转向进程外会话并设置状态服务器。这将通过直接的痛苦。然后开始查看平衡器和Web服务器日志,以查看是否需要更好的平衡器或需要更改代码以堵塞内存泄漏。

-1

工作液:

  1. 开始 “ASP.NET状态服务器” 在您的服务(使之自动,所以它总是开始)
  2. 添加到您的web.config (副本如):
<system.web> 
    <sessionState mode="StateServer" 
     stateConnectionString="tcpip=localhost:42424" 
     cookieless="false" 
     timeout="60" /> 
    <machineKey validationKey="DCB7132A24938F2166E362214ADAD861FA6B819E0A337F0E63257F87014A37B5EBC5D9F9AD107C38E3D3378BC35CBAF81407F3E4D8BA430FD65348DDCC469623" decryptionKey="DD09731F76271B2AAE6AE957626F8D1B8E3CBF11EF8E3CDDF01332CDF914D4B5" validation="SHA1" decryption="AES" /> 
</system.web> 

**注:或生成你自己的机器键:http://aspnetresources.com/tools/machineKey


现在你可以回收您的应用程序池,修改你的web.config,或重新启动您的Web服务 - 与会话到位! 现在,您还可以启用水池中的网络花园以获得更多性能。