应用池定时回收导致的掉线问题
发布时间:2026-06-01 15:37       
更新时间:2026-06-02 14:16
网站每隔固定时间掉一次登录状态,用户得重新登录?先查应用池的回收设置,八成是它定时把工作进程换掉了。
## 为什么会掉线
IIS 应用池默认开启定时回收,默认间隔 1740 分钟,也就是 29 小时。回收时 IIS 关闭旧工作进程、拉起新进程,进程内 Session(会话数据直接存在进程内存里的存储方式)随旧进程一起消失,用户登录态自然失效。表现出来就是"每到某个时间点,全站要重新登录一次",而且时间点周期性出现。
## 回收机制存在的意义
回收不是缺陷,是防御机制:长时间运行的进程难免积累内存碎片和小泄漏,定期换新进程是低成本的自愈手段。问题出在默认值是相对间隔,服务器重启一次,回收时刻就漂移一次,运气差会落在白天高峰,在线用户集体被踢。
## 怎么改到低峰
应用池→高级设置→"回收"一节:把"固定时间间隔"改成 0,禁用按间隔回收;在"固定回收时间"里加一个凌晨三点的时刻。这样回收依然发生,防御机制保留,只是挪到了没人在线的时间。改完可以对照应用池的事件日志验证,回收时会记下进程关闭和启动的成对记录。
## 只改时间还不够稳的话
会话数据不丢的根本解法是把 Session 搬出进程:改用状态服务(StateServer)或数据库模式(SQLServer),进程换了登录态还在。改动需要在 web.config 里配置并满足序列化要求,老项目改造前先在测试环境过一遍。另外,负载均衡多台服务器的场景本来就必须用进程外会话,正好一并解决。
## 预防与排查动作
遇到"定时掉线"按顺序查:确认现象时间点是否周期出现;对照应用池回收设置与事件日志的时间;核对 Session 模式是进程内还是进程外;把回收时间固定到低峰。注意别一刀切把回收完全关死——没有回收的进程一旦泄漏积累,最后以内存耗尽的方式爆发,比掉一次线难看得多。
登录态稳定靠三层:回收挪低峰、会话存进程外、发布更新避开高峰。做到前两层,"每隔一阵要重新登录"的投诉基本绝迹。