文本描述了云星空App在非用户操作时间间隔超时后自动退出的问题,以及设置K/3 Cloud系统闲置超时/重新登录时间后出现的问题。提出修改Web.Config中的AppTimeOut和IIS程序池自动回收时间来解决用户被退出的问题,并优化服务器稳定性,设定凌晨定时回收以避免影响用户体验。
1> 业务场景
1.1> 云星空在非用户操作时间间隔超过设定时间AppTimeOut时,自动退出到登陆界面;造成使用人员外出后或不在电脑一段时间后,再回来已经退出系统,又要重新登录并且出于安全考虑没有记住密码的功能,又要费事登录系统,对于长时间使用系统人员会有一点的影响;
1.2> 在按照官方教程,如何设置K/3 Cloud系统闲置超时/重新登录时间(AppTimeOut/AppHearbeat)?设置以后,发现在使用中,还是不定时默认被强制退出,需要重新登录系统;
2> 关键步骤
2.1>在WebSite下找到Web.Config文件,在文件中找到节点 configuration/appSettings,在该节点下可以设置AppTimeOut和AppHearbeat参数。
超时时长 AppTimeOut:默认为3600秒 = 1小时,比如: 设置为12小时 = 212 * 3600秒 = 43200秒;
(基于安全考虑不建议设置太长,HTML5端最小控制为600秒,GUI和SL端没有最小值控制);
2.2> 如果按以上设置后,在使用中还是会出现不是空闲时间也会自动退出的现象,那是因为IIS程序池自动回收优化,
IIS的程序池默认回收间隔是1740分钟(29小时),在自动回收过程中,应用程序池将会清空,保留在内存中的数据将会被清理(相当于IIS重启)。对于互联网应用程序,为了减少数据库服务器的负担,也许会选择将大量数据暂存在内存中,回收会造成内存数据丢失,如果没有及时保存到数据库中,可能导致应用程序出问题。如果遇到系统使用高峰期,回收将可能导致一段时间应用程序无响应(出现假死状态),给予用户一种很不好的体验。 在优化应用程序池之前,我们应用先了解下程序池的几个配置信息:
发生配置更改时禁止回收:如果为True,应用程序池在发生配置更改时将不会回收。
固定时间间隔(分钟):超过设置的时间后,应用程序池回收,为0意味着应用程序池不会按固定间隔回收。 系统默认设置的时间是1740分钟(29小时)。
禁用重叠回收: 如果为true,将发生应用程序池回收,以便在创建另一个工作进程之前退出现有工作进程。
请求限制: 应用程序池在回收之前可以处理的最大请求数。如果值为0,则表示应用程序池可以处理的请求数没有限制。
生成回收事件日志条目: 每发生一次指定的回收事件时便产生一个事件日志条目,里面的明细设置不一一介绍。
问题分析:每1740分钟(29小时)回收一次是否合理?
不太合理,这个周期内,有可能应用程序处于访问高峰期。因为每天的回收时间都是不一样的,很有可能在高峰期回收,就会造成短时间内网站访问出现问题。因此,要避免最大程度的减少对用户的影响,我们需要充分的分析应用程序的访问情况,例如哪个时间段是高峰,哪个时间段访问人数最少。了解到这些后,应用程序部署人员就应该设定固定的回收时间,例如一个网站凌晨两点访问人数是最少的,那么它可以设置“特定回收时间”在凌晨两点,应用程序池里面的特定时间是支持设定多个的,请注意。
此处服务器我们可以设置为每天晚上凌晨4点自动回收一次,等于IIS重启一次,又可以让第二天星空使用更加顺畅些, 设置如下图所示:
固定时间间隔(分钟) 设置为0, 特定时间设置为凌晨4点: 04:00:00
3>应用小结
简述如下, 修改超时时长 AppTimeOut为12小时, 修改IIS程序定时回收时间固定在凌晨, 可解决用户空闲时被退出的问题,又可以解决服务器长期运行IIS的稳定性;
推荐阅读