记一次线上bug
2019-07-11 本文已影响0人
hqwer
问题描述
测试和预生产都没有问题,但是生产环境上,会偶尔出现用户的登录信息获取不到的情况
分析问题
查看日志发现是因为用户的信息user在session中获取不到,因为我将代码chtch了,没有打印具体的错误信息。只能由下往上排查。
排查问题
1.首先查看异步发送用户请求的接口(以前遇到过),异步发送用户消息,有可能会出现新线程无法获取session的情况,异步导出会对user进行操作,发现没有问题
2.然后排查上层(service层)获取用户信息为空,将获取session的方法放在controller层,Dubbo框架的controller会请求不同机器的service方法,service无法获取上下文中的内容,有可能导致session中user为空的情况,然后重新部署,发现直接在controller层报错。
3.再往上排查,只能是环境的问题了,最终发现有一台机器的redis没有配置o(╥﹏╥)o,用户登录请求后台,会将用户的session放在redis缓存中,请求服务器时会带上redis缓存中的session,这样就出现了用户信息偶尔获取不到的情况。
总结
最终是因为线上机器的环境不一致导致。导致session中的user为空。出现问题,迅速定位问题,并解决问题,找出问题的本质,多思考,多总结。ヾ(◍°∇°◍)ノ゙