我们将会话设置为120分钟后超时。然而,最近,其中一个生产服务器遇到了大量问题。由于我无法访问服务器盒本身,因此我在这里处理有限的信息。我们有两个部署了我们网站的服务器。 Sever A一直工作正常,但服务器B经常遇到这些过期的会话问题。这是最近的,就像过去两周一样。
我知道我没有提供足够的信息来直接查明问题,但是哪些问题可能导致会话重置而没有押韵或原因?
答案 0 :(得分:4)
显然,我修好了它。我并排打开了两个服务器的IIS7应用程序池高级设置,注意到一个区别:服务器A上的Regular Time Interval
设置为5,服务器B上的设置为1740.我将服务器A的设置更改为1740(默认值)和问题立即停止。
奇怪的是,当服务器管理员回滚到一个月前,这种情况就开始发生了。有些东西被某种方式搞砸了,这些设置一定已经改变了。
虽然我仍然不完全理解我做了什么修复的事情,要么只是巧合,要么是低5分钟的设置是问题。
如果有人关心这一点,那么,无论如何都要这样做。
答案 1 :(得分:1)
应用程序池可能由于多种原因之一而被回收。有许多设置,超过任何设置都会导致ASP.NET回收:
如果您正在使用进程内会话状态,那么如果应用程序池回收,会话将会丢失。
如果没有更改任何设置,则很可能是因为内存泄漏(可能是因为内存泄漏(可能不是“真正的”泄漏,而是应该释放它们时引用)。 / p>
你说你正在使用两台服务器。如果会话状态丢失,则听起来就像是在使用进程内会话状态。在这种情况下,我假设您正在使用“粘性会话”(后续请求转到同一服务器)进行负载平衡?
如果我错了并且您正在使用共享状态(例如SQL Server会话状态提供程序或状态服务器),那么您的服务器上的时钟是否不同步?
答案 2 :(得分:1)
有些事情会浮现在脑海中:
正如@Steve Morgan所说,如果您正在使用进程内会话和“粘性”会话,那么它可能是由负载均衡器中的问题引起的。当负载平衡时,会话应始终处于进程外,因为坦率地说,“粘性”并不意味着会话不会在两台机器之间反弹。这只是意味着它不太可能。如果负载均衡器过载,则用户将被发送到与第一个不同的服务器。
App Pool Recycling是会话丢失的另一个原因;再次由于使用进程内会话管理。如果您转到进程外,它将隐藏问题。这里的真正问题虽然需要调查,因为它几乎总是由于代码不好造成的。
我的猜测是你有各种各样的问题。首先转移到进程外会话并设置状态服务器。这将立即消除痛苦。然后开始查看平衡器和Web服务器日志,看看是否需要更好的平衡器或需要更改代码以插入内存泄漏。
答案 3 :(得分:0)
最近是否在您的服务器上放置了新网站? 我们在转移到.net 4时遇到了这个问题,并且没想到为新的.net 4站点创建一个新的应用程序池(与.net 2 / 3.5站点相对)。 这导致应用程序池不断重新启动,因为它们无法在同一个应用程序池下运行。
你是否上传了任何可能让自己陷入循环的新代码,这也可能导致应用程序池崩溃,导致会话重启?
另一个想法..你有没有等待在这台服务器上安装的更新..这也造成了无法解释的问题。
答案 4 :(得分:-1)
工作解决方案:
<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服务 - 并且会话已到位! 现在,您还可以在池中启用Web园以获得更高的性能。