浅析开放平台应用系统性能调优
Posted 我们的开心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅析开放平台应用系统性能调优相关的知识,希望对你有一定的参考价值。
文/赵俊杰 张鸿 严晨光
随着5G、大数据、人工智能、生物识别等信息技术的高速发展,传统商业银行均加快了数字化和智慧化的转型步伐。开放平台应用系统作为数字化银行的核心,其性能高低不仅关系着银行的声誉,也影响着转型的进程。本文针对银行开放平台应用系统的特点,介绍常用性能监控工具及常见性能问题调优方法,并给出具体的应用实例,希望对测试人员性能调优能有所帮助。
![浅析开放平台应用系统性能调优](https://image.cha138.com/20210405/09e378b0c73d47d48fd01849fdfc0b06.jpg)
开放平台应用系统泛指依托X86服务器、小型机、F5、存储等硬件设备和Linux、Unix、Windows等系统软件构建的应用系统,也泛指除IBM大型主机平台应用系统以外的所有应用系统。开放平台应用系统具有以下特点:一是应用系统数量多且涉及业务复杂,银行应用系统涉及客户营销、产品、渠道、运营、风控、经营管理和数据服务等业务领域;二是应用系统技术架构和软件多样化,系统中包含了PASS云平台、WebSphere、Tomcat、Oracle、mysql、Redis、Gbase以及Kafka、Hbase、Hive等大数据平台生态圈的诸多软件,系统架构更是千差万别;三是核心系统和渠道类系统用户量或交易量大,对性能要求高;四是系统之间关联复杂,测试环境配置复杂且性能问题定位难度较大。
![浅析开放平台应用系统性能调优](https://image.cha138.com/20210405/09e378b0c73d47d48fd01849fdfc0b06.jpg)
常用性能指标
开放平台应用系统性能指标通常包含但不限于并发用户数或TPS、响应时间、成功率、资源利用率。其中,交易量较大的系统建议重点关注TPS,交易量较小的系统建议重点关注并发用户数,响应时间取值为压力测试工具测试结果中用户响应时间的90%,成功率要求为99.6%以上,应用服务器和数据库服务器的CPU及内存使用率一般不超过80%。此外,可根据系统特点和测试目标酌情关注其它性能指标,如:监控类系统可关注TCP连接数、网卡流量等性能指标。常用性能指标监控工具如下表。
![浅析开放平台应用系统性能调优](https://image.cha138.com/20210405/09e378b0c73d47d48fd01849fdfc0b06.jpg)
性能调优对系统软硬件各个方面的设置和关联进行调整和优化,使之发挥出最大的效能,从而高效支撑业务的开展。性能调优推荐按照“硬件-网络-系统配置参数-应用程序-系统架构”依次进行分析、调优。开放平台应用系统性能问题多集中在交易响应时间长、应用服务器或数据库服务器CPU利用率高、JVM内存溢出、SQL语句无相关索引或索引使用不当、日志级别设置不当、查询结果未分页、Oracle数据库未使用绑定变量、应用程序与数据库连接未使用连接池等,常见问题的具体调优方法如下。
CPU利用率高
CPU利用率高通常涉及应用服务器和数据库服务器,银行应用系统中应用服务器和数据库服务器操作系统以Linux和Oracle为主流,本文仅以Linux和Oracle为例进行说明。
Linux操作系统CPU利用率高:通过top命令查看CPU占用率高的进程,再根据进程PID查看CPU占用率高的线程ID(top -Hp 进程PID),将线程ID转换为16进制,生成javacore文件(Kill - 3 进程PID),利用16进制的线程ID在javacore文件中查看线程的详细执行信息,从而定位CPU利用率高的应用程序代码。
Oracle数据库服务器CPU利用率高:通过top命令查看CPU占用率高的进程PID,通过进程PID定位出sql语句的sql_id(select sql_id from v$session where paddr=(select addr from v$process where spid=’XXXX’)),通过sql_id查看具体sql(select sql_text from v$sql where sql_id=’XXXX’), 再通过dbms_xplan.display_awr()与sql_id(select plan_table_out from table(dbms_xplan.display_awr(‘XXXX’)))查看语句的执行计划,进而对sql语句进行优化。
JVM堆内存溢出
堆是JVM运行时内存中最大的区域,也是和程序开发密切相关的区域,所有的对象实例、数组都存放在这个区域。JVM堆内存使用量持续增长,当增长到最大堆后,将无法分配新内存,系统出现内存溢出,WebSphere堆内存溢出发生后,系统会自动生成堆内存转储headdump文件,同时 SystemOut.log中会出现关键字“java.lang.OutOfMemoryError”,native_stderr.log中会出现关键字“java/lang/OutOfMemoryError”。
内存溢出可利用HeapAnalyzer定位占用内存大的对象,同时使用GC日志分析工具分析详细垃圾回收日志 (native_stderr.log),可以分析出现内存溢出的过程,确认触发内存溢出的直接原因,评估垃圾回收工作的性能,找出合适的GC策略和调优参数。
Websphere会话覆盖参数
应用服务器为Websphere的应用系统,如采用Session方式控制用户访问,当大量用户瞬间并发访问时,由于WebSphere会话线程不释放或释放缓慢,可能会出现请求无响应的情况。此时,可以考虑配置Websphere会话管理参数,具体登录到was控制台,进入会话管理界面,选中该界面中的覆盖会话管理-启动cookie,内存中最大会话量填写3000,然后点击应用。
交易响应时间过长
使用Dynatrace监控工具,在Edit system profile --> sensors --> Browse路径下设置待测交易的类路径,通过事务流可以定位是应用服务器端响应慢还是数据库端响应慢,再查看purepath树,即可定位到导致响应时间长的应用程序代码或sql,对于长sql可进一步分析其查询计划,查看索引使用是否合理或是否存在全表扫描,进而根据情况调整表索引或sql逻辑结构。
Oracle未使用绑定变量
绑定变量常适用于频繁执行的SQL语句,且语句涉及的查询数据分布较均匀,分区较均衡。SQL语句未使用绑定变量时,每次执行都会导致Oracle数据库进行硬解析,而每次硬解析都会查询一次gv$sql全局动态视图,频繁地进行数据库表对象的统计信息收集,造成极大的性能消耗,从而使应用程序运行耗时更长。
通过以下两个步骤能够筛选出可以使用绑定变量的SQL语句。
1)利用force_matching_signature查询可能需要使用绑定变量的语句数量:
select v.force_matching_signature ,count(*) from v$sql v where FORCE_MATCHING_SIGNATURE <> EXACT_MATCHING_SIGNATURE and PARSING_SCHEMA_NAME <> 'SYS' group by v.force_matching_signature having count(*)>&a order by 2;
2)查出疑似可使用绑定变量的SQL语句
select PARSING_SCHEMA_NAME,sql_text,sql_id from v$sql where force_matching_signature='XXXX';
获得查询结果后,可与开发人员确认是否需使用绑定变量。
![浅析开放平台应用系统性能调优](https://image.cha138.com/20210405/09e378b0c73d47d48fd01849fdfc0b06.jpg)
例1:某系统“项目列表查询”功能50用户同时运行,平均响应时间为16.798秒,超过了通过准则中设定的5秒,通过Dynatrace事务流分析发现,外部服务调用花费的时间占交易总时间的90.17%,如图所示。
进一步分析purepath树发现工作流调用耗费时间较长,具体为getInputStream()方法调用次数多且每次调用花费时间长。
通过分析getInputStream()方法相关的工作流平台,发现工作流平台上的流程版本太多,每次查询均需调用所有的版本进行处理,清理多余的流程版本后,“项目列表查询”功能50用户同时运行平均响应时间下降为4.879秒。
例2:某系统一查询交易并发执行时Oracle数据库CPU,利用率持续为85%左右。通过查看AWR报告中SQL ordered by CPU TIME 和SQL ordered by Gets,发现CPU耗用时间较多和逻辑读较高的SQL均为SELECT count(1) FROM SYS_USER_STAFF where extend1 > '-1',初步确定引发CPU利用率偏高的原因是该SQL语句逻辑读较高。
开启autotrace(set autotrace on),执行该sql语句,分析执行计划和统计信息发现,该sql执行时逻辑读偏高,通过将sql语句改写为SELECT count(1) FROM SYS_USER_STAFF where extend1 ='1',sql语句执行时逻辑读大大降低,同时相关交易并发时CPU利用率由85%左右下降为37.2%。
![浅析开放平台应用系统性能调优](https://image.cha138.com/20210405/09e378b0c73d47d48fd01849fdfc0b06.jpg)
性能调优是一个涉及网络、硬件、软件和应用程序等多层次、综合性的优化过程,随着应用性能管理从最开始的以网络监控为核心,发展到以基础组件为核心,再到当前的端到端应用性能管理为核心,基于SaaS交付的应用性能管理产品将成为主流,未来性能调优过程也将由人工分析逐步向自动化、智能化方向迈进。
轮值总编:刁翔宇
责任编辑:王咪咪
美编:杨超
技术支持:姜皓
我们的开心 · 总编辑部
(e 语)
以上是关于浅析开放平台应用系统性能调优的主要内容,如果未能解决你的问题,请参考以下文章