在某个查询场景的性能测试过程中,遇到了一个问题:测试过程中报错率逐渐攀升。进一步检查后发现,在查询业务所在应用的后台日志和平台应用的后台日志中,都出现了用户登录相关的报错信息。经过排查分析,发现了问题的根源,并做出了解决方案。
在测试过程中,发现报错率逐渐增加,并且在后台日志中出现以下错误信息:
查询业务应用后台日志:
2023-08-25 19:37:49.629 xxx-web [019c40515a0854f4,019c40515a0854f4] [http-nio-9900-exec-576] ERROR [BaseService.java:249] - 调用平台权限接口失败,基础资料调用平台权限数据查询接口失败!
com.ufgov.ma.exception.MaException: 基础资料调用平台权限数据查询接口失败!
被调用的平台应用后台日志:
用户未登录或会话过期!
进行了以下排查步骤来找到问题的根源:
keys userlogininfo:*
查询。发现每个节点平均分配了3000多个用户的tokenid。volatile-lru
,即在设置了过期时间的键空间中,优先移除最近未使用的key。通过以上排查过程,初步得出以下结论和分析:
基于以上问题分析,提出了以下解决思路:
volatile-ttl
,即在设置了过期时间的键空间中,具有更早过期时间的key优先移除。按照上述解决思路进行实施:
将Redis配置的缓存淘汰机制设置为volatile-ttl
。
调整tokenid的过期时间为较长时间,例如86400秒(24小时),以确保用户登录信息在一定时间内不会被过期清理。
#session的超时时间默认86400秒(登录超过1天必须重新登录)
sessionTimeOut=86400
#userLoginInfo的超时时间默认14400秒(没有操作超过4小时需要重新登录)
userLoginInfoTimeOut=86400
同时,调整业务要素的过期时间为较短时间,以避免大量业务要素占用过多的内存资源(已设置为默认)。
再次进行性能测试,观察报错率和后台日志。
经过上述优化方案的实施,得到了以下结果和结论:
通过本次经验,我们了解到在进行性能测试或高并发压力测试时,需要充分考虑缓存管理的影响,并针对具体业务场景进行优化。同时,通过正确的排查和分析,结合合理的解决思路和方案,我们能够有效地解决问题并提升系统的稳定性和性能表现。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章