JIRA系统是由澳大利亚的Atlassian公司开发的一款基于Java架构的项目管理软件,最初是作为错误和问题跟踪系统而设计的,但随着时间的推移,它已经发展成为一个功能全面的项目管理工具。
而我们公司使用JIRA来管理各种需求,项目发布流程管理,BUG 跟踪,团队协作,工时填写,流程控制,数据统计等。主要就是通过开发自定义插件和依赖第三方插件来完成各种定制化功能。
ScriptRunner 就是一款功能强大的第三方插件,他可以使用脚本去控制流程,插入监听器、条件、判断、PostFunction等。而它支持的就是Groovy脚本。
bug描述
因为以前的脚本查询很多是一个库的连接跨库查询多个库的数据,公司要求不同的数据库需要单独的账号权限控制,而且为了提升填写工时的性能,我们将之前别的库的表重新设计成了JIRA系统库的AO表,所以相关的脚本都需要重构。重构的插件和脚本上线后不久,系统开始出现卡顿,系统连接数升高后不能自动回落,只能等待系统自己的垃圾回收。后续工作时间连接累积升高不释放,造成连接池耗尽,系统资源耗尽系统崩溃,只能临时重启系统解决问题。
bug解决过程
Bug 出现后因为影响广泛,JIRA系统公司自己和客户都在上面办公,交流。所以领导要求尽快解决,连接莫名升高不释放的问题。
接下来就是开始寻找原因,第一个想到的就是查看系统日志,但是系统日志一切表现正常,因为脚本和插件功能本身没有问题,只是连接没有关闭,然后有很多功能都涉及到数据库操作,难以定位是那些连接没有关