性能分析调优摘要

性能分析调优

00_总论

性能调优的常规手段

  1. 空间换时间

  2. 时间换空间

  3. 分而治之

  4. 异步处理

  5. 并行

  6. 离用户更近一点

  7. 一切可拓展,业务模块化,服务化,良好的水平扩展能力

01_性能分析方法

可以抽象为两大类

  1. 自底向上: 通过监控硬件即操作系统性能指标来分析性能问题

  2. 自顶向下: 通过生成负载来观察被测试的系统性能

02_单机性能分析与调优

021_性能分析流程

需要关注的指标

层级被观测对象观测指标
客户端或者生成负载的机器RT(响应时间)不同业务的响应时间
统一业务在不同时间点的响应时间
不同配置下的响应时间
TPS(每秒完成的事务数)
CPUCPU利用率,CPU负载
Mem可用物理内存,虚拟内存使用率,缓存使用量
DisksDisk Time, IO等待
Network宽带使用率,任务队列长度
Web服务器Tcp Connections(tcp连接数)可用netstat观察, grafana中查看"Network Netstat"=>"Tcp Connections"
Thread Pool(中间件简历的线程池)监控线程状态
JVMGC情况,Heap使用情况,使用jmx_exporter监控后,可使用grafana监控
Load AverageCPU负载队列长度
应用服务器DB Connections中间件与数据库之间建立的连接数及连接状态
数据库DB Time消耗在数据库上的CPU时间
Top SQL按内存由多到少排序SQL,按CPU从多到少排序SQL
PGA, SGA其内存使用情况

性能分析流程

序号步骤名称说明
1检查RT模拟用户发起负载后,采用自顶向下的方式是偶先分析RT(响应时间)
2检查TPSTPS大时RT小,说明性能良好
3检查负载机资源消耗检查CPU使用率,CPU负载,确认是用户CPU高,还是系统CPU高
4前提: 确认测试脚本没有性能问题,不会造成统计结果的不准确
5检查内存使用情况,确认内存泄露风险,不会造成结果统计的不准确
6判断负载机是否有性能问题排除负载机的问题,确保测试结果可参考
7Tips: 负载机的CPU不过高,内存不过高,并且负载机和被测对象的带宽是否足够,比如局域网下测试
8检查WEb服务器的资源消耗检查CPU使用率,确认用户CPU与系统CPU占用情况
9检查内存使用请看
10检查磁盘使用情况
11检查占用的带宽
12分析Web页面响应的时间组成,确认是什么影响了性能
13Tips: Litemall单机环境系统CPU使用在10%以下
14Tips: Litemall单机环境(4U8G),CPU在75%时候,需要50M带宽
15检查是否Web服务器瓶颈判断是否web服务器硬件性能瓶颈
16Tips: 瓶颈总会到达的,主要看,有没有那个指标增长变化的太快,比预期中提前到达瓶颈
17检查中间件配置确认是都是此配置问题
18检查App服务器资源消耗关注CPU,内存,磁盘,IO,判断是否是App服务器硬件性能瓶颈
19Tips: 有时候web服务器和引用服务器会分离部署
20数据库服务器资源消耗分析CPU消耗,CPU负载
21内存消耗
22IO繁忙程度
23数据库监控
24是否是DB的性能问题由监控结果来判断是否是DB性能问题
25是否SQL问题定位最不合理的SQL占比
26索引是否正常引用
27检查共享SQL是否合理范围
28检查解析ER结构是否合理
29检查数据热点问题
30检查数据分布是否合理
31检查碎片整理等等
32其他比如网络阻塞,磁盘IO瓶颈,热点等等

主要涉及的知识

  1. 硬件知识(CPU, MEM, Disk, Net)

  2. 系统知识(Linux,Windows)

  3. 中间件知识(JVM, Tomcat, Jboss, Weblogic, WebSphere等)

  4. 数据库知识(Mysql, SQLserver, Oracle, DB2, Sysbase)

  5. 网络知识(截包分析)

  6. 程序知识

  7. 架构知识

022_系统性能关注点

序号关注点具体原因分析
1System Resource(系统资源)CPU利用率过高计算量大 (运算,连接查询, 数据统计)
2非空闲等待 (IO等待,资源争用)
3过多的系统调用 (比如频繁写日志)
4过多的中断 (外部设备中断等)
5内存吃紧过多的页交换和内存泄露JVM内存设置过小
6磁盘繁忙硬盘IO速度低(极少情况)
7硬盘老化,或者碎片过多等较难优化,只能在设计的时候考虑
8网络流量过大高并发系统并发用户多,
9所处环境宽小非局域网情况下,或者环境在公有云上等
10带宽被抢占该环境写有网络控制策略等
11OS系统负载
12系统连接数的控制
13缓存内存不够时还会有虚拟内存机制
14DB(数据库)OLTP(联机事务处理系统)慢查询
15大事务
16死锁
17DB Time
18磁盘IO等待时间
19处理方法1:优化业务过程,尽量减少数据请求,不管读写
20处理方法2: 优化SQL语句提高效率
21OLAP(联机分析处理)处理方法1: 预处理, 比如物理化, 多维数据
22处理方法2: 分而治之,比如并行查询
23处理方法3: 优化语句提高效率
24Middleware(中间件)JVMJVM对内存使用情况,GC频率,线程状态
25Thread pool需要监控,如果使用率达到阈值则需要增加线程池容量
26DB Connections Pool需要监控,如果使用率达到阈值则需要增加容量
27Appserver
28Webserver页面size动态数据, CSS, JS, 图片等的大小
29隐藏的,无用的数据传输
30优化方法1: 页面静态化
31优化方法2: 减小页面Size,图片更小,CSS合并,JS精简,
32优化方法3: 砍掉无用请求,无用数据传输,
33优化方法4: 对数据做异步处理
34优化方法5: DNS和CDN加速,让响应数据离用户更近

023_程序优化

策略方向具体
系统框架选择
程序优化表单压缩
局部刷新
仅取所需
逻辑亲戚
谨慎继承
程序算法优化
批处理对于大批量的数据,最好能够醉成批处理,不会因为单次操作而影响系统的正常操作 比如对数据的传输,通过打包定时的方式去传输
延迟处理对于大对象的展示采用延迟加载的方式,层层递进的显示 明细
防止内存泄露对于生命周期长的对象风险较大, 引入的第三方软件也需要单独测试,session需要做过期处理
减少大对象引用需要控制大对象的使用,避免资源浪费
防止争用死锁
索引编写合理的SQL,尽量使用索引
存储过程分布式数据库不推荐使用,存储过程即在存储过程中就尽量做一部分运算
内存分配合理分配PGA和SGA(oracle数据库)
并行
异步
使用好的设计模式来优化程序
选择合适的IO模式比如NIO, AIO等

024_配置优化

策略方向具体
连接池的配置参数Spring+Hibernate+C3P0来配置
连接池配置多少连接合适没有精确的计算公式,通过测试来估算,再根据实际业务增长来进行放大
监控连接池数据库连接池监控,可以用prometheus+grafana技术栈来监控

026_线程优化

策略方向具体
线程池优化增加线程池
CPU处理能力综合分析CPU的处理能力,再去配置比如CPU一个核心每秒能够处理10个任务,name一个核心的CPU每秒理论上能处理40个任务, 在同一时刻CPU最多只能处理4个任务,所以理论上线程池配置4个连接 但实际上,服务器的追加线程数量=((线程等待时间+线程CPU时间)/线程CPU时间) * CPU数量
内存容量JVM内存
系统线程数限制
DB优化优化物理结构
共享SQL,绑定变量,降低高水位
查询器优化
单条SQL优化
并行SQL
减少资源争用
优化内存
优化IO进行条带化,读写分离,减少热点

03_业务流程优化

不建议,因为风险较大,一般在设计开发阶段去考虑

04_结构优化

041_单机结构

042_集群结构

043_分布式结构

  1. DNS&CDN静态加速

  2. 负载均衡器

  3. Web服务分布式集群

  4. App服务分布式集群

  5. 分布式缓存

  6. 分布式数据库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值