快被系统性能逼疯了?你需要这份性能优化策略
作者介绍 刘迪伟,就职于世界五百强银行。负责公司网银业务系统的设计和交付,擅长并持续关注Java性能优化、DevOps等领域。 XX银行网银系统是一套全新的对公业务渠道类系统,经过两年的建设,将逐步对外提供服务。 该系统融合了原来多个对公渠道系统,并发量是以前多个系统之和,吞吐量要求将大幅上升。为了使广大对公客户使用系统时获得更快的响应时间体验,项目组对系统进行了持续的性能测试和优化。这一过程中,形成了一套针对新建系统进行性能测试和优化的方法论。 该方法论包括测试环境准备、测试功能优先级、性能优化原则、常用性能指标及工具、工具使用方法、常见性能问题原因和优化方法,以及典型案例和进一步优化方法的讨论。 由于系统已经开发完成,根据性能优化修改范围尽可能小且不引入更多问题的原则,本文将只讨论对系统进行局部优化的方法,而系统初始设计时为了提高性能而进行的设计不在讨论范围之内。 我们使用Linux操作系统,压测工具为loadrunner,中间件版本包括IHS8.5.5.9、WAS8.5、IBMJDK1.7(IBM J9VM)、DB2V10、Redis3.2.3。 一、应用系统性能评价指标
TPS = 并发用户数 / 响应时间 二、常见性能监控指标及工具 1、操作系统监控指标及工具 主要监控指标:CPU、系统CPU、内存、磁盘IO、网络IO、请求耗时。 常用命令:
2、JVM监控指标及工具
JVM启动参数中增加: -Dcom.sun.management.jmxremote.port=1088 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
CPU抽样: 线程快照:
三、性能测试前置条件 1、数据库表数据量准确 要和生产数据量保持一致,至少一个数量级。数据分布尽量均匀。 2、测试环境和生产一致 测试环境机器配置、参数、代码尽可能和生产保持一致(数据库服务器硬件除外)。 3、合理确定并发用户量 系统并发用户量有多种算法可以估算:
4、预估各功能交易量,确定压测功能优先级 根据交易量从大到小排名,排名靠前的优先压测。 5、设置性能问题认定标准 比如响应时间超过3s、TPS低于10、服务器cpu占用率超过70%、jvm堆内存使用100%、垃圾回收频繁、网络IO或磁盘IO达到瓶颈等……都可能是性能问题。 四、性能优化一般思路 1、找到性能瓶颈 性能瓶颈定义:导致系统TPS低、响应时间长、资源(CPU、内存、网络)占用高等问题的关键程序模块。提升该程序模块的性能,可以大幅度改善性能。 常见的性能瓶颈原因包括:数据库慢查询SQL、日志打印、xml大报文解析和格式转换、复杂业务逻辑、锁竞争等。 2、如何找到性能瓶颈
3、针对性能瓶颈进行合理优化 性能优化原则:
五、常见问题及优化方法 1、SQL执行时间长 问题现象:系统响应时间长、数据库cpu高。 问题原因:全表扫描、索引低效、排序溢出。 解决方法:
|