性能调优就是用更少的资源提供更好的服务,成本利益最大化。性能调优的手段并不新鲜,性能调优常规手段有:
MQ
(消息队列),目前在互联网应用中大量使用。CDN
技术,把用户请求的静态资源放在离用户更近的地方。分布式架构的运用给性能带来了革命性的提升,业务流程的调整也会显著提升系统性能,单系统的调优能够压榨出更高的处理能力。单机性能分析调优可从从以下四部分入手:
性能分析方法
性能分析是一个大课题,不同的架构、不同的应用场景、不同的程序语言分析的方法若有差异,抽象一下大致分为两类。
(1) 自底向上:通过监控硬件及操作系统的指标(CPU、内存、磁盘、网络等硬件资源的性能指标)来分析性能问题(配置、程序等问题)。因为用户请求最终是由计算机硬件设备来完成的,做事的是CPU。
(2) 自顶向下:通过生成负载来观察被测试的系统性能,比如响应时间、吞吐量;然后从请求的起点由外及里一层一层的分析,从而找到性能问题所在。
不管是自上而下还是自下而上,关键点就是生成负载、监控性能指标。好一点的方式是先用自顶向下的方式解决掉明显的性能问题,再结合自底向上的方式分析更深层次的问题。
单机的性能分析与调优
常见的J2EE应用架构,一般分为Web层(请求接入、负载均衡、页面渲染等)、应用层(业务逻辑实现)、持久化曾(数据记录)。
下面列出了性能测试时我们需要关注的指标。
Client:客户浏览器,比如IE、Chrome等访问Web页面。
Load Machine:是生成负载的机器,即我们的压测机器用来模拟用户负载。
Web Server:提供Web服务的服务器,即我们访问的Web页面由此服务器提供服务;一般都部署在Nginx、Apache等中间件上。
Middleware:中间件,比如Tomcat、Jboss、WebLogic等。
OS:操作系统,Windows或者Linux。
System Resource:系统资源,比如CPU、内存、磁盘、网络等。
App Server:应用服务,实现业务逻辑,比如生成订单,生成统计报表。
DB:数据库服务器,比如Oracle、Mysql
、SqlServer
等。
RT:响应时间,一笔业务的完成时间。
TPS
:每秒完成的事物数。
CPU:CPU的性能指标,比如CPU利用率、CPU负载。
Mem:内存性能指标,比如可用物理内存、虚拟内存使用率。
Disks:Disk性能指标, 比如Disk Time、IO等待。
Network:网络指标,如带宽使用率,任务队列长度。
TCP Connections:指TCP连接数,可以用netstat
命令统计得到。
Thread Pool:中间件建立的线程池,监控线程状态。
JVM
:JVM
性能指标,比如GC情况,Heap使用情况。
Load Average:CPU负载队列长度。
DB Connections:中间件与数据库之间建立的连接数及连接状态。
DB Time:消耗在数据库操作上的CPU时间。
OP SQL
:按内存占用由多到少排序SQL
,按CPU占用由多到少排序SQL。PGA、SGA:PGA、SGA内存使用情况。
性能分析过程:
上表列举了一种典型的分析思路,可以看到性能测试结果分析是一个考验综合知识的活动,涉及了多方面的知识,包括但不限于下面7部分:
大型系统的复杂度已经不是一个人力所能及的事情。上面提到的7个部分就可以是多个岗位(运维、程序员、架构师、DBA
等),每个岗位又配置专业人员。性能分析时从他们那里获取性能指标数据,这些信息汇总后用来判断是否有性能问题。
对于性能测试工程师来说首先要做到的事情是要知道监控哪些指标?这些指标反应什么问题?什么时候去关注这些监控信息?在性能测试执行与分析时你就是总设计师,负责协调这些事项。
程序优化
程序调优是治本的手段,当前性能测试往往都是在SIT测试完成后进行的,性能问题暴露得太晚,这个时候去修改代码,风险较大。所以性能测试往往要提前规划,先架构后程序(先整体后个体)。
(1) 系统框架选择
SSH架构是当下最流行的MVC模型。SSH架构提供了明晰的层次结构,各层协同完成业务实现,简化了程序设计过程,加快了程序交付进程。但是对大型的业务系统,特别是大数据量的分析计算过程,可以把数据处理换成在数据库中进行处理,减少网络传输,性能也会提升,所以应该不同的应用场景选择更合适的处理方式。
(2) 程序优化
低效代码优化,排除架构问题,纯粹是程序逻辑及算法抵消,比如逻辑混乱、调用继承不合理、内存泄漏等。常见的解决方法如下:
(3) 配置优化
(4) 数据库连接池优化
数据库连接池存在的意义是让连接复用,通过建立一个数据库连接池(缓冲区)以及一套连接使用、分配、管理策略,使用的该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。
连接池的主要关注的问题:
(5) 线程优化
(6)DB优化
通常使用数据库有3个要求,性能好、数据一致性有保障、数据安全可靠;数据库优化前提也是这3个要求。
(7) 优化内存、减少物理IO访问
(8) 优化IO,进行条带化、读写分离、减少热点等
注意:单系统性能分析的思路是通过现象结合监控锁定性能问题(程序、配置、IO等)单系统性能调优的思路是减少资源占用,减少请求
业务流程优化
准确地说就是业务架构调整,业务架构是整个系统好坏成败的关键,对此处做调整就是推翻先前的设计,风险比较大。这点对于架构师的要求很明确。现实往往是残酷的,反过来想一下,正是因为这种矛盾的存在才导致了性能测试以及性能调优的存在。
结构优化
业务的增长导致性能问题推动着架构的发展,从单机到集群再到分布式结构。
原文:https://www.cnblogs.com/gered/p/10756942.html