性能测试——记XX银行保全项目性能问题分析优化

时间:2023-02-12 18:06:13

记XX银行保全项目性能问题分析优化

数据库问题也许是大部分性能问题的关注点,但是JAVA应用与数据库交互的关节,JDBC 就像是我们人体的上半身跟下半身的腰椎,支持上半身,协调下半身运动的重要支撑点。假如腰椎出问题了,在强壮的上半身或者下半身也是只能说身体瘫痪着。

就如数据库设计很优良或者JAVA应该设计开发代码写得非常优化,但是在JAVA应用代码与数据库之间的桥梁没设计衔接好,彼此之间的数据交互沟通不顺畅,那性能问题还是非常严重的。如资源型的内存泄漏、系统频繁抛出各种异常等现在导致影响系统性能。

前段时间客户方一套系统运行了四年多了,数据库大部分表数据量确实很大 百万以上数据量,而这段时间却频繁内存溢出,需要进行测试诊断问题。该项目是两家公司合作开发设计的,都有性能测试人员,公司要我争取拿下该项目测试。于是过去该项目进行前期的测试调研等工作,当我准备过去写测试计划、测试方案、优化方案时,客户方的领导说另外一家公司在多久前都已经写好类似的文档了,郁闷。

于是我着手开始写这些文档,主要是写优化方案,只能根据平常的优化经验等写出大概的解决方案,但是这样不能对症下药也许客户方不认可,于是我询问了开发设计人员性能问题大概现状描述性,针对性的整理的优化方案;

看了一些代码、日志、设计文档等资料大概明白问题点了,日志设计问题、异常处理问题、数据库设计问题等设计问题。写成文档形式等发送给客户方后,就这样把该项目的测试任务接下来了。其实并不是哪些文档作用多大,只是该项目我以前帮忙优化过问题,那是今年四月份我刚来我们公司,这个项目也是一直出现问题,那时是另外一家公司也就是我们合作该项目公司的人员做的或者说现在跟我们竞争性能测试的公司做的,那时四月份他们测试该项目很长时间, 但是测试过程中一直出现内存溢出一直找不出问题,请了他们公司的专家,好像也是没看出问题点,搁了很久,我们公司老总就让我过去试试看,结果是一些很简单的问题,他们没注意至关注代码问题,所以一直找不出问题,就那样那时那个项目我承接过来测试了一周把问题找出来并说明了优化方案解决了。也许是那时有帮忙解决该问题缘故,这次我写好了哪些文档发给客户方后,客户领导知道是我来负责测试的就直接点名我来做了。

测试工作顺利展开,搭建测试环境、测试需求调研等做好后开始测试。参数调整确实有问题,但是不是主要问题,虽然发现该项目的JVM调整不符合逻辑,但是这个只是指标不治本,第一周工作就先把JVM设置合理性化优化好,第二周测试把部分数据库问题抛出来了,很多是数据库设计不合理以及不走索引等问题,因为这次目的是找出JAVA代码问题,所以数据库问题我暂时优化下不会造成干扰我定位JAVA问题就行。经过两周的普查测试对比,发现公共问题是 应用服务调用数据库数据时出现问题。也就是JDBC死锁问题。

但是经过审核代码发现这个问题以现在的项目组人员没办法优化,因为现在该项目组结项了没有太多人力资源协助优化,这时最郁闷的事情,而且该问题从设计就错了,历史性问题没人敢接或者说这个项目本来是另外一家公司做的,但是那批人员走了,现在虽然有问题谁敢去接,接了优化面积一大片出现故障没人赔得起。这才是我最郁闷的地方。虽然问题是定位清楚也说明优化方法了,但是项目领导心里都清楚这件事情优化的分量。

没办法情况下,我只能最小化优化,最大化调整,看能不能调整部分技术代码,不改变业务实现逻辑方式下暂时解决,看了两天的代码,发现在数据抽取转换时char 转为string 多余了,而且有多家了循环判断,那时也只是猜测。于是改了下,让开发人员帮忙编写成CLASS 给我,重新部署好后进行优化前后测试对比,也许是瞎猫碰到死老鼠,测试前后性能优化对比响应时间从大部分交易响应时间平均6秒多,降为2.5秒以下。

在稳定性测试后发现还有部分内存泄漏,发现是资源调用没释放问题,跟开发人员说怎么改后重新测试,内存使用降低了,但是还是没办法解决,因为最大问题是JDBC的实现方式问题,发了邮件说明问题后,没人敢解决。我写了测试报告说明了问题优化方式后,离开该项目,但是响应时间等问题解决了,内存泄漏问题也不会那么严重了,预计不会每周重启了,至少可以成三到四周了