写点什么

系统架构性能优化思路

  • 2021 年 11 月 27 日
  • 本文字数:1745 字

    阅读完需:约 6 分钟

今天谈下业务系统性能问题分析诊断和性能优化方面的内容。这篇文章重点还是谈已经上线的业务系统后续出现性能问题后的问题诊断和优化重点。

系统性能问题分析流程



我们首先来分析下如果一个业务系统上线前没有性能问题,而在上线后出现了比较严重的性能问题,那么实际上潜在的场景主要来自于以下几个方面。

  • 业务出现大并发的访问,导致出现性能瓶颈

  • 上线后的系统数据库数据日积月累,数据量增加后出现性能瓶颈

  • 其它关键环境改变,比如我们常说的网络带宽影响

正是由于这个原因,当我们发现性能问题的时候,首先就需要判断是单用户非并发状态下本身就有性能问题,还是说在并发状态才存在性能问题。对于单用户性能问题往往比较容易测试和验证,对于并发性能问题我们可以在测试环境进行加压测试和验证,以判断并发下的性能。

如果是单用户本身就存在性能问题,那么大部分问题都出在程序代码和 SQL 需要进一步优化上面。如果是并发性能问题,我们就需要进一步分析数据库和中间件本身的状态,看是否需要对中间件进行性能调优。

在加压测试过程中,我们还需要对 CPU,内存和 JVM 进行监控,观察是否存在类似内存泄漏无法释放等情况,即并发下性能问题本身也可能是代码本身原因导致性能异常。

性能问题影响因素分析



对于性能问题影响因素,简单来说包括了硬件环境,软件运行环境和软件程序三个方面的主要内容。下面分别再展开说明下。


-     硬件环境    -

硬件环境就是我们常说的计算,存储和网络资源。

对于服务器的计算能力,一般来说厂家都会提供 TPMC 参数作为一个参考数据,但是我们实际看到相同 TPMC 能力下的 X86 服务器能力仍然低于小型机的能力。

除了服务器的计算能力参数,另外一个重点就是我们说的存储设备,影响到存储的重点又是 IO 读写性能问题。有时候我们监控发现 CPU 和内存居高不下,而真正的瓶颈通过分析反而发现是由于 IO 瓶颈导致,由于读写性能跟不上,导致大量数据无法快速持久化并释放内存资源。



比如在 Linux 环境下,本身也提供了性能监控工具方便进行性能分析。比如常用的 iostat,ps,sar,top,vmstat 等,这些工具可以对 CPU,内存,JVM,磁盘 IO 等进行性能监控和分析,以发现真正的性能问题在哪里。

比如我们常说的内存使用率持续告警,你就必须发现是高并发调用导致,还是 JVM 内存泄漏导致,还是本身由于磁盘 IO 瓶颈导致。

对于 CPU,内存,磁盘 IO 性能监控和分析的一个思路可以参考:



运行环境-数据库和应用中间件

数据库和应用中间件性能调优是另外一个经常出现性能问题的地方。


-     数据库调优    -

拿 Oracle 数据库来说,影响数据库性能的因素包括:系统、数据库、网络。数据库的优化包括:优化数据库磁盘 I/O、优化回滚段、优化 Rrdo 日志、优化系统全局区、优化数据库对象。



要调整首先就需要对数据库性能进行监控。

我们可以在 init.ora 参数文件中设置 TIMED_STATISTICS=TRUE 和在你的会话层设置 ALTER SESSION SET STATISTICS=TRUE 。运行 svrmgrl 用 connect internal 注册,在你的应用系统正常活动期间,运行 utlbstat.sql 开始统计系统活动,达到一定的时间后,执行 utlestat.sql 停止统计。统计结果将产生在 report.txt 文件中。

数据库性能优化应该是一个持续性的工作,一个方面是本身的性能和参数巡检,另外一个方面就是 DBA 也会经常提取最占用内存的低效 SQL 语句给开发人员进一步分析,同时也会从数据库本身的以下告警 KPI 指标中发现问题。

比如我们可能会发现 Oracle 数据库出现内存使用率高的告警,而通过检查会发现是产生了大量的 Redo 日志导致,那么我们就需要从程序上进一步分析为何会产生如此多的回滚。

应用中间件性能分析和调优

应用中间件容器即我们常说的 Weblogic, Tomcat 等应用中间件容器或 Web 容器。应用中间件调优一个方面是本身的配置参数优化设置,一个方面就是 JVM 内存启动参数调优。

对于应用中间件本身的参数设置,主要包括了 JVM 启动参数设置,线程池设置,连接数的最小最大值设置等。如果是集群环境,还涉及到集群相关的配置调优。

对于 JVM 启动参数调优,往往也是应用中间件调优的一个关键点,但是一般 JVM 参数调优会结合应用程序一起进行分析。



比如我们常见的 JVM 堆内存溢出,如果程序代码没有内存泄漏问题的话,我就需要考虑调整 JVM 启动时候堆内存设置。在 32 位操作系统下只能够设置到 4G,但是在 64 位操作系统下已经可以设置到 8G 甚至更大的值。

发布于: 3 小时前阅读数: 7
用户头像

InfoQ签约作者 2020.11.10 加入

文章首发于公众号:五分钟学大数据。大数据领域原创技术号,深入大数据技术

评论

发布
暂无评论
系统架构性能优化思路