性能瓶颈诊断及性能调优案例

Posted 软测实验田

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了性能瓶颈诊断及性能调优案例相关的知识,希望对你有一定的参考价值。

简介

对于复杂的应用系统,一旦用户并发量过大,则系统出现性能指标急剧下降的情况。而性能瓶颈的定位是一个比较复杂的工作,并且工期是不确定的,因此,往往给项目带来比较大的风险。结合性能分析诊断工具dynaTrace和压力测试工具能够高效的为客户提供性能瓶颈的诊断和性能调优服务。 

性能瓶颈诊断及性能调优案例

案例背景

客户反映访问页面时反应慢,并且出现部分请求失败的现象。

被测系统为B/S结构、J2EE架构,应用服务器为Tomcat,数据库为Oracle 10g。

系统的使用对象为公司的内部人员,网络环境为100兆局域网。

解决目标

借助代理工具dynaTrace,通过对单用户的网络带宽计算,完成定位任务,排除网络瓶颈。

方案拟定

该项目引入应用性能管理工具dynaTrace协助问题的分析诊断,以高效定位到瓶颈的根本原因,甚至源代码的上下文。该工具由Server、Analysis、Collector、Agent、Client等五部分组成。其技术思路如下:

1)在应用服务器Tomcat植入dynaTrace Agent,该Agent作用是向应用前端监控Web 请求、向应用后端监控DB的SQL语句请求。并能7X24实时收集应用服务器的所有的日志,包括但不限于Web 请求的事务、DB执行的SQL语句。Server端向Client端返回数据并展现报表。

2)如上述思路,其测试环境部署如下示意图:


性能瓶颈定位排查步骤

1)通过错误信息快速定位瓶颈

对实时监控收集的日志进行相关性分析。首先查看其事务流图Transaction Flow。Failed Transactions显示失败的事务数及失败事务数占总事务数的百分比。图2中的Failed Transactions显示存在失败的事务867个,占总事务数的3.17%。如图2所示。


性能瓶颈诊断及性能调优案例

对出现失败的事务进行分析,首先查看失败事务提示的Error Log,如图3所示。显示存在4XX 、5XX Error,也有重要程序内部Log,具体Error如图4、图5、图6所示。

性能瓶颈诊断及性能调优案例

将收集的错误日志提交给开发人员。HTTP Response Code的错误详情日志可以协助开发人员快速定位有问题的URL并修复。Important Loggings可以帮助开发人员快速定位程序出现问题的原因。如图6显示创建Socket 连接失败,并提示确认相关Server已开启或相关组件已正常运行。

2)快速定位瓶颈原因

在性能索引图表快速锁定响应时间长的性能索引。如图7,事务响应时间最长的性能索引为/iosT/as.do,响应时间为40004.86ms。

性能瓶颈诊断及性能调优案例

分析性能索引的方法执行情况,可快速看到执行过程中出现了Exception。如图8。

性能瓶颈诊断及性能调优案例

定位到出现Exception的源码,如图9。

性能瓶颈诊断及性能调优案例

针对响应时间最长的性能索 /IOST/as.do进行分析。钻取性能索引/IOST/as.do 的Web Request,定位其相关的URL,如图10。URL为http://172.16.200.61:8080/IOST/as.do,在浏览器上访问URL报404错误,如图11。

性能瓶颈诊断及性能调优案例

性能瓶颈诊断及性能调优案例

进一步分析404 Error的原因,钻取性能索引/IOST/as.do的Error,定位到一个JRedis API的Socket连接失败,如图12。



解决方案效果

本项目通过性能测试及dynaTrace监控工具的辅助,快速发现了JRedis的socket连接失败是导致该系统出现性能瓶颈的主要原因。开发人员对问题修复后,系统的性能得到了明显的提升。


备注:JRedis为缓存服务器。Web前台将根据一定规则,从数据库直接获取需浏览或查询的信息进行显示,为了规避当前系统请求负担引发事务处理失败的情形,引入Redis缓存服务器,使系统请求入口点统一从缓存进行处理,以达到快速访问和确保事务成功的双重目的。引入缓存服务器大幅度地提高了系统处理客户请求的能力,解决了系统处理网络I/O操作的瓶颈问题。不但提高系统可扩展性,而且有利于提高系统吞吐率。

以上是关于性能瓶颈诊断及性能调优案例的主要内容,如果未能解决你的问题,请参考以下文章

性能测试常见瓶颈分析及调优方法

《linux性能及调优指南》 3.3 内存瓶颈

《linux性能及调优指南》 3.5 网络瓶颈

性能测试常见瓶颈分析及调优方法

面试必备:深入 Java 应用性能调优实践

(转)《linux性能及调优指南》 3.3 内存瓶颈