(二)常用的优化策略

一、性能瓶颈的定位

查看操作系统负载

1、CPU (查看各性能指标命令集合-待整理)

2、IO

3、带宽

4、其他

使用Profiler测试,另外外部工具例如Java的JProfiler/TPTP/CodePro Profiler;通过日志查询

二、性能优化策略(具体case)

空间换时间

1、将远程调用改为数据初始化到heap堆中(us级),服务提供端本地查找时间、减少RPC 网络传输时间。

2、jvm heap被缓存数据占用,则系统对象存储受限,gc频次上升。加机器

时间换空间

离线计算,数据预处理, 先算好,放起来

代码优化

1、多线程中锁优化:少用锁或不用锁;threadLocal对象

2、内存分配

    )避免内存泄漏

    )使用池化技术:数据库连接、线程等昂贵对象,池化处理

3、异步操作

    )非核心流程异步化

算法调优

1、选择更合适的数据结构

一个司机库存排班表数据的查询(按公里距离、司机出勤等多指标展示月排班表),通过直接MySql -> hash cache -> B-Tree cache,直接查库优化为缓存读取hashmap数据,但出现并发访问问题,又优化成treeMap,并发只在父子节点处。

2、避免过多的IO开销

实时计算的case,将Rpc invoke调用改为本地存储模型、公式(缓存占用jvm内存,gc频繁)

3、分而治之和预处理

网络调优

1、DNS

2、池化连接:昂贵的对象,池化处理

3、序列化算法:RPC框架已经帮rd完成了这部分工作

4、合理的I/O模型:BIO NIO AIO

数据库调优

1、避免事务和锁: 大事务和锁均影响db吞吐和响应速率,带来锁等待问题

2、横向扩展、纵向扩展

3、SQL语句优化

    )使用索引

    )避免表连接:通过添加冗余字段,或者采用内存提前计算存储方式达成

4、搜索引擎:联合查询采用ES等搜索引擎代替结构化数据库,横向的宽表,字段无限扩充。

三、建议

掌握Profiler工具

牢记常用性能指标

了解一些算法、数据结构相关的知识

关注业内成熟的性能优化解决方案

在实践中提升自己对系统性能的理解

(本次仅提供大致思路,具体case有待二次整理)

你可能感兴趣的:(【项目总结】)