频繁出现表单会话超时
问题描述
在使用苍穹系统过程中,如果在短时间(少于默认超时的8小时)内频繁出现表单会话超时的弹框,一个单据都还没有录完就被弹出表单了,需要反复地快速的去录入数据,这会导致用户体验会非常差,而且这种情况无论是PC端还是移动端都有可能会出现
原因分析
分析思路:看到"表单会话超时"信息,脑海中第一想到的就是跟redis缓存有关,那么就会存在如下几种可能性:
1、redis会话相关参数设置不当
2、redis会话数据被清理或不存在
3、苍穹服务与redis实例建立的tcp连接超时
解决方案
根据上面的三个分析思路进行排查:
1、redis会话相关参数设置不当
检查苍穹系统属性中 session.timeout 和 redis.defaulttimeout 的值是否设置太小,默认是28800(8小时)。如果检查到是很小的值,可以登录mc到环境公共配置项中搜索这两个参数进行修改保存,并发布集群配置
2、redis会话数据被清理或不存在
(1)redis会话数据被清理
redis最大内存设置太小,导致表单和数据缓存共用的redis内存频繁满,触发淘汰策略,表单会话被清理掉。
解决方法: 扩容Redis物理内存和调整Redis最大内存设置,也可以将表单会话和数据缓存拆分出来,具体配置方法参考:苍穹之Redis部署优化
(2)redis会话数据不存在
这种情况主要出现在开发环境,由于开发环境大量的本地服务连接到一起,本地环境可能启用了轻量级参数(lightweightdeploy=true),不会共用服务端环境的redis,而web调度到业务节点服务的时候有可能调度到本地环境导致redis数据读取失败。
解决方法:
方式一、所有的本地环境都和服务端共用一套redis,取消轻量级参数(lightweightdeploy=false)
方式二、服务端的nginx直接转发到mservice业务节点的地址去,而不是转发到web节点,再由web节点通过dubbo随机调度到mservice节点,这样避免访问到其他本地环境去了。
3、苍穹服务与redis实例建立的tcp连接超时
苍穹服务与redis实例建立的tcp连接是长连接,有些网络环境限制了长连接的超时时间,所以我们需要从操作系统层面保持长连接的心跳检测,保活参数设置如下:
在/etc/sysctl.conf中修改或添加:
net.ipv4.tcp_keepalive_time = 30
参数生效方式:执行 sysctl -p
检查是否生效:执行 sysctl -a|grep net.ipv4.tcp_keepalive_time
频繁出现表单会话超时
本文2024-09-23 01:13:51发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144613.html