某系统单点登录性能测试诊断分析优化过程 荐

某系统单点登录性能测试诊断分析优化过程

原因说明

下面描述的是前段时间协助本地一家上市 IT 公司做产品技术选型时对他们的技术框架进行性能测试与优化过程记录,因测试过程中涉及数据库选型和各类问题的监控分析优化,篇幅比较大,本次主要是描述在同样基础软硬件下、同样应用工程包和框架、同样数据量下,针对 MYSQL 环境下进行单点登录压力测试的结果过程记录。

初始环境配置

某系统单点登录性能测试诊断分析优化过程 荐
某系统单点登录性能测试诊断分析优化过程 荐

测试内容

1、             用户登录,首页查看,退出

2、 某业务交易添加、查询、删除、上传文档

3、 业务审批流程创建、提交、审批、同意等工作流程;

问题诊断分析

LR 端监控分析

在压力测试中,首先压力测试,登录首页、退出, 10 个用户并发 10 分钟,通过 loadrunner 控制台发现登录响应时间 120 秒超时现象,失败率一直在递增, LR 结果如下图:

某系统单点登录性能测试诊断分析优化过程 荐
某系统单点登录性能测试诊断分析优化过程 荐

应用资源使用监控分析

因为是使用 wind2008 系统服务,监控相对比较方面,通过任务管理器监控,发现应用服务器 CPU 使用不均衡,出现类似单线程死锁现象,其中一个 CPU 线程使用率大于 80% ,而另外一个 CPU 线程使用率非常低,如下图 :

某系统单点登录性能测试诊断分析优化过程 荐
某系统单点登录性能测试诊断分析优化过程 荐

这时发现网络带宽使用率也非常高, 10 用户并发网络 IO 瓶颈每秒大于 100M ,如下图:

某系统单点登录性能测试诊断分析优化过程 荐
某系统单点登录性能测试诊断分析优化过程 荐

通过与网管交流,服务器给予配置的网卡是 1G ,那说明是应用服务端发送数据给客户端展现导致网络带宽使用偏高,最终导致前端 120 秒超时问题出现,因为是使用虚拟机环境,为了更好的证明是不是应用问题,也加以猜测怀疑是不是刚好有其他原因导致的,这时我停止压力测试发现再没压测情况下网络带宽使用 50KB

某系统单点登录性能测试诊断分析优化过程 荐
某系统单点登录性能测试诊断分析优化过程 荐

说明是应用某方面问题引起如上问题,这时也看到操作系统可用物理内存一直持续降低,响应时间也越来越大,为了更准确的查看具体问题原因,查看 tomcat 应用日志分析发现,应用日志展示内存溢出现象 java.lang.OutOfMemoryError: GC overhead limit exceeded ,如下图:

某系统单点登录性能测试诊断分析优化过程 荐
某系统单点登录性能测试诊断分析优化过程 荐

通过日志细化分析,发现登录首页,会展现业务相关信息,而且需要全表扫描方式通过 MYSQL 服务捞取数据结果集,然后传递给应用端进行封装展现给前端,最终出现表现现象是前端 lr 出现 120 秒超时,后台应用 CPU 单线程死锁、网络传输带宽使用率偏高,内存溢出现象,具体抓取分析的日志如下:

java.lang.OutOfMemoryError: GC overhead limit exceeded

at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3669)

at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3609)

JVM 分析

通过压力测试过程发现内存溢出时,监控到的 JVM 使用如下图:无法正常 GC 回收导致,内存溢出,也发现了 JVM 默认配置下有问题,如果配置合理 JVM 使用虽然会异常,但是还是可以强制 GC 回收,问题如下图:

某系统单点登录性能测试诊断分析优化过程 荐
某系统单点登录性能测试诊断分析优化过程 荐

根源定位

因登录首页后需要刷新框架,其中最大问题是框架设计中对登录首页会对某一个业务交易的公告信息进行时时刷新展现数据,如果对应业务表数据量有多少,则公告信息就全部展现,如下业务交易图:

某系统单点登录性能测试诊断分析优化过程 荐
某系统单点登录性能测试诊断分析优化过程 荐

而框架中,公告信息展现需要加载到 getBulletinList 控件下 ,以目前现有测试数据量,单用户下该控件大需要展现的数据大小 17M ,导致 10 个用户并发时网络带宽和 java 虚拟机出现异常,而且数据库出现类似如下锁表信息:

某系统单点登录性能测试诊断分析优化过程 荐
某系统单点登录性能测试诊断分析优化过程 荐

当然压力测试过程中抓取其他锁表语法,例如用户登录对应的 SQL 语法,也会导致响应时间超时:

某系统单点登录性能测试诊断分析优化过程 荐
某系统单点登录性能测试诊断分析优化过程 荐

优化方法

1、 通过创建索引方式

2、 修改 JVM 配置添加新生代大小和强制 GC 回收机制

3、 因为框架设计问题,公告栏展现只展现最近时间前 5 笔数据;如果需要看详细信息点击更多在触发后台业务交易,进行查看详细信息;

优化后监控

通过优化后, 100 用户单点登录并发压力测试,应用服务器资源使用率,如下图, CPU 使用均衡,均低于 30% ,网络带宽使用率低于 20M ,数据库资源使用率也都低于指标范围,

某系统单点登录性能测试诊断分析优化过程 荐
某系统单点登录性能测试诊断分析优化过程 荐

应用 JVM 回收情况如下:

某系统单点登录性能测试诊断分析优化过程 荐
某系统单点登录性能测试诊断分析优化过程 荐

数据库服务器资源使用情况如下:

某系统单点登录性能测试诊断分析优化过程 荐
某系统单点登录性能测试诊断分析优化过程 荐

LR 压力测试结果如下:

某系统单点登录性能测试诊断分析优化过程 荐
某系统单点登录性能测试诊断分析优化过程 荐

结:

本次压力测试技术选型中的性能测试,涉及交易功能包含,登录退出、管理交易、流程交易,也对软硬件、操作系统参数、应用参数、代码、数据库产品对比、网络配置、浏览器选型等进行性能测试监控诊断分析优化进行对比,如下 :

某系统单点登录性能测试诊断分析优化过程 荐
某系统单点登录性能测试诊断分析优化过程 荐

本篇文章成文仓促,从选型的角度看,建议针对各种满足不同功能需求的技术框架进行选型,当面临技术选型时,首先考虑的要对产品架构进行合理的验证评估,例如性能测试,也要根据不同的场景进行验证测试,最终选择一款合适的框架;