前段时间有一天系统访问量突然增加,系统每隔一两个小时就会由于内存瞬时飙升而宕机。查看内存dump文件发现其中Shiro的SimpleSession对象异常多。后来经分析才发现是由于使用Spring集成Shiro时配置不当导致的。当时的配置如下:
- <bean id="sessionManager" class="org.apache.shiro.session.mgt.DefaultSessionManager">
- <property name="globalSessionTimeout" value="3600000"/>
- <property name="deleteInvalidSessions" value="true"/>
- <property name="sessionValidationSchedulerEnabled" value="true"/>
- <property name="sessionDAO" ref="sessionDAO"/>
- </bean>
该配置中使用Shiro自带的用户会话超时校验功能,每一个小时执行一次该逻辑。
经过研究源代码发现有需要进行认证授权等验证的请求进入的时候,DefaultSessionManager对象(即上面配置的