加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

快被系统性能逼疯了?你需要这份性能优化策略

发布时间:2019-01-19 04:20:23 所属栏目:Windows 来源:dbaplus社群
导读:副标题#e# 作者介绍 刘迪伟,就职于世界五百强银行。负责公司网银业务系统的设计和交付,擅长并持续关注Java性能优化、DevOps等领域。 XX银行网银系统是一套全新的对公业务渠道类系统,经过两年的建设,将逐步对外提供服务。 该系统融合了原来多个对公渠道
副标题[/!--empirenews.page--]

作者介绍

刘迪伟,就职于世界五百强银行。负责公司网银业务系统的设计和交付,擅长并持续关注Java性能优化、DevOps等领域。

XX银行网银系统是一套全新的对公业务渠道类系统,经过两年的建设,将逐步对外提供服务。

该系统融合了原来多个对公渠道系统,并发量是以前多个系统之和,吞吐量要求将大幅上升。为了使广大对公客户使用系统时获得更快的响应时间体验,项目组对系统进行了持续的性能测试和优化。这一过程中,形成了一套针对新建系统进行性能测试和优化的方法论。

该方法论包括测试环境准备、测试功能优先级、性能优化原则、常用性能指标及工具、工具使用方法、常见性能问题原因和优化方法,以及典型案例和进一步优化方法的讨论。

由于系统已经开发完成,根据性能优化修改范围尽可能小且不引入更多问题的原则,本文将只讨论对系统进行局部优化的方法,而系统初始设计时为了提高性能而进行的设计不在讨论范围之内。

我们使用Linux操作系统,压测工具为loadrunner,中间件版本包括IHS8.5.5.9、WAS8.5、IBMJDK1.7(IBM J9VM)、DB2V10、Redis3.2.3。

一、应用系统性能评价指标

  • 响应时间:尽快的给用户返回响应,体现系统处理请求的速度;

  • 吞吐量TPS:每秒完成的事务数,体现系统处理能力;

  • 并发性:业务请求高并发时,系统能否稳定运行;

  • 扩展性:单机处理能力不足时,系统能否横向扩展。

TPS = 并发用户数 / 响应时间

二、常见性能监控指标及工具

1、操作系统监控指标及工具

主要监控指标:CPU、系统CPU、内存、磁盘IO、网络IO、请求耗时。

常用命令:

  • top –H –p pid:cpu负载监控,实时查看占用cpu高的线程;

  • vmstat:系统负载监控;

  • pidstat:cpu让步式上下文切换监控,监控锁竞争;

  • iostat:磁盘利用率监控;

  • nmon:监控cpu、内存、io使用率 ./nmon -f -t -s 2 -c 100 每2秒采集一次,共100次;

  • netstat -anp|grep端口或IP|grep ESTABLISHED|wc -l:服务器连接数监控。

2、JVM监控指标及工具

  • Jconsole,监控cpu、内存垃圾回收。

JVM启动参数中增加:

-Dcom.sun.management.jmxremote.port=1088

-Dcom.sun.management.jmxremote.authenticate=false

-Dcom.sun.management.jmxremote.ssl=false

快被系统性能逼疯了?你需要这份性能优化策略

  • jvisualvm,cpu采样、java方法耗时分析、jvm线程栈快照、监控cpu、内存垃圾回收。

CPU抽样:

快被系统性能逼疯了?你需要这份性能优化策略

线程快照:

快被系统性能逼疯了?你需要这份性能优化策略

  • jca457.jar,ibm javacore线程快照分析:

快被系统性能逼疯了?你需要这份性能优化策略

  • ga456.jar,ibmjvm垃圾回收gc分析:

快被系统性能逼疯了?你需要这份性能优化策略

  • ha456.jar,ibmjvm内存,heapdump分析,内存溢出时使用;

  • TProfiler,cpu采样、java方法cpu耗时分析,cpu高,响应慢时使用;

  • JProfiler,cpu采样、java方法cpu耗时分析,cpu高,响应慢时使用;

  • OracleDeveloperStudio12.6-linux-x86,cpu采样、java方法cpu耗时分析,cpu高,响应慢时使用。

三、性能测试前置条件

1、数据库表数据量准确

要和生产数据量保持一致,至少一个数量级。数据分布尽量均匀。

2、测试环境和生产一致

测试环境机器配置、参数、代码尽可能和生产保持一致(数据库服务器硬件除外)。

3、合理确定并发用户量

系统并发用户量有多种算法可以估算:

  • 平均并发用户数:

    C=nL/T(n是考察时间内用户登录数,L是用户平均在线时间长度,T是考察值时间长度)

    并发用户数峰值:C’=C + 3*根号C

  • 用户总量/统计时间*影响因子:

    网银用户量100万,根据2/8原则, 80%用户在上午9点到11点,下午2点到4点之间登录系统,每次登录耗时1到1.5秒。则并发用户为:

    1000000*0.8/4/3600*1.5=82.5,

    1000000*0.8/4/3600*1=55

  • 根据系统用户数计算:

    并发用户数=系统最大在线用户数的8%到12%

  • 根据TPS估计:

    C=(Think Time + 1)* TPS,

    网银用户思考时间10s,

    C=(10+1)* 3=33。

4、预估各功能交易量,确定压测功能优先级

根据交易量从大到小排名,排名靠前的优先压测。

5、设置性能问题认定标准

比如响应时间超过3s、TPS低于10、服务器cpu占用率超过70%、jvm堆内存使用100%、垃圾回收频繁、网络IO或磁盘IO达到瓶颈等……都可能是性能问题。

四、性能优化一般思路

1、找到性能瓶颈

性能瓶颈定义:导致系统TPS低、响应时间长、资源(CPU、内存、网络)占用高等问题的关键程序模块。提升该程序模块的性能,可以大幅度改善性能。

常见的性能瓶颈原因包括:数据库慢查询SQL、日志打印、xml大报文解析和格式转换、复杂业务逻辑、锁竞争等。

2、如何找到性能瓶颈

  • 使用LoadRunner给每个接口的增加事务,记录其响应时间和TPS,最慢的那个接口往往是瓶颈;

  • 分析慢交易的日志,查看是哪个操作耗时最长;

  • 分析数据库快照,看是否有执行较慢或者全表扫描的SQL;

  • 通过Javacore查看线程正在执行的代码,是大部分阻塞在IO上,还是大部分在进行计算。针对不同的问题,使用不同的分析工具。详细内容可以看下一章节。

3、针对性能瓶颈进行合理优化

性能优化原则:

  • 先优化瓶颈问题;

  • 方案简单,尽量不引入更多复杂性,尽量不降低业务体验;

  • 满足系统性能要求即可,不引入新的bug。

五、常见问题及优化方法

1、SQL执行时间长

问题现象:系统响应时间长、数据库cpu高。

问题原因:全表扫描、索引低效、排序溢出。

解决方法:

  • (编辑:源码门户网)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!