记录一个跌宕起伏的解决bug过程

2023-11-21 19:10

本文主要是介绍记录一个跌宕起伏的解决bug过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题症状:测试发现在服务在运行一段时间之后就会挂掉,尤其是在进行安全漏洞扫描和性能测试时更加明显,后台没有报错日志,单纯的应用不再接收新的请求;

问题重现、分析和解决:刚开始很难在开发环境上复现这个问题(我们自己开发环境经常会重启),而且无法定位到在进行什么操作的时候才会导致服务器挂掉;只能通过多次进行扫描然后查看导致服务挂掉的请求时什么,发现每次扫描卡住之后最后一个请求都是登录请求,所以我们初步判断可能是登录导致应用挂掉,但是让人疑惑的是为什么正常操作时应用没有挂掉,而是操作一段时间之后应用才会挂掉,然后网上一顿搜索分析,发现服务不再响应的特征是数据库的连接数达到一定的数量而且这些连接由于被阻塞不能释放,导致数据库卡死;到这基本是找到了导致服务挂掉的罪魁祸首了,但是怎么解决这个问题呢,是那一块的代码导致了这个问题呢?然后我首先将可能导致数据库发生阻塞的代码重新走了一遍,甚至将很多不规范的写法都重新规范了一遍,还是不行,然后我又回想起每次挂掉前的最后一个扫描请求时登录,所以我又回到登录页面去查(因为我们登录时做的单点登录,在跳转到另一个系统进行登录的)一遍遍的修改调试都无果,而这时通过大量在开发环境的测试(我们在开发环境将最大连接数设置小一些,问题也更容易复现)我们发现不止是进行一定量的登录请求后会发生这个问题,不停的刷新首页也会导致这个问题,然后我们排除了登录的问题,而扫描漏洞导致服务挂掉前的最后一个请求每次都是登录请求也可以理解,因为我们某些页面有登录拦截,然后扫描漏洞的程序在每隔一定的时间就会进行登录操作,而一旦发现登录不上去了,程序就停止扫描了,而服务也许在这之前就已经挂掉了;言归正传,这时我们把问题锁定到首页上,因为不断f5刷新首页,确实可以看到后台数据库的阻塞进程在增加,然后就是分析首页的代码,一段一段的屏蔽排除发现是页面上的的图片加载会导致这个问题,这让我们又疑惑了,但是随着继续深入的测试,点击一个加载失败的图片链接让我们有了新的发现,这个加载失败的图片跳转到的一个404页面里面包含了获取后台用户数据的操作,继续前面的排除法,删除这部分代码就不会出现问题了,到这里我们至少知道该怎么去解决项目上的问题了,但是这并没有解决疑惑,为什么在404页面获取用户信息会导致这个问题,继续深入研究发现是数据库配置的问题,发现是在openSessionInViewFilter的拦截没有配置Error这个选项,导致在error页打开的session没有正常关闭,加上这个不修改error的tag页也可以解决问题!

这篇关于记录一个跌宕起伏的解决bug过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/404452

相关文章

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr