Skip to content

YorkHwang/performance-optimize-guide

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

系统性能调优指南

一、调优目标

  • 调优目的
  1. 提升效率,用户体验,让用户感觉更“快”
  2. 节省服务器资源,让老板省钱
  3. 系统稳定可靠,性能越高应对突发流量能力越强
  • 数值目标
  1. 降低延迟,例如打开一个页面延迟从1000毫秒降低到100毫秒以内
  2. 提升单位时间吞吐量。TPS(QPS) 200次每秒提升到2000次每秒

二、调优对象

  • 找到性能阻塞点
  1. 要坚持“实事求是”的原则,找到系统是哪些地方慢。
  2. 找到慢的原因

  分析日志
  查看监控
  压力测试
  review代码

  • 常见性能阻塞点
  1. 硬件资源
    网络、内存、CPU、磁盘

  2. 操作系统
    服务端系统(Linux)
    客户端系统(IOS\Andriod\Mac\Windows)

  3. 基础软件
    中间件:Jvm、Nginx、Tomcat、Jetty、ZooKeeper、Kafka、RocketMq、Redis等
    数据库:Mysql、Oracle、PostgreSQL

  4. 程序代码
    内存管理、算法、同步异步、串行并行、线程(池)、锁竞争、IO模型、连接池、压缩后传输、按需获取、SQL性能、逻辑正确、缓存使用

  5. 系统架构
    单机系统
    单体应用
    全同步
    读写混合
    负载不均衡
    无缓存

  6. 业务逻辑
    分步处理、延迟加载、功能和性能需合理取舍

三、优化策略

  • 硬件资源改善
  1. 分布式部署,适当增加节点,扩展连接数
  2. 增加网络带宽、内存容量、CPU数,提高磁盘读写效率或容量,网卡传输率等
  • 操作系统
  1. 操作系统的选择,Linux优于Windows,IOS优于Android
  2. 操作系统的配置,例如:关闭GUI、关闭非必要的消耗资源的后台程序等
  • 基础软件调优
  1. 中间件配置参数调优 例如:Jvm参数调优,Tomcat/Jetty线程和队列调优,Kafka副本数和Ack策略,Redis内存大小等
  2. 数据库配置参数调优 例如:
    优化数据库参数最大连接数:max_connetions;
    增加线程缓存大小:thread_cache_size;
    增量临时表内存大小:temp_table_size和max_heap_temp_size
  • 程序代码优化
  1. 内存优化,按需分配内存,提前释放内存,控制单次操作时消耗过大内存、数据压缩等
  2. 优化算法,例如敏感词过滤,字符串匹配算法转成DFA(Deterministice Finite Automaton),即有穷状态机
  3. 异步化、并行化、多线程处理,充分利用机器内核资源,节省执行时间,例如:打印日志时异步处理,并行查询商品库存和评论信息时并行,
    但并不是越多线程越好,线程太多做线程切换时是需要消耗资源的。
  4. 无锁化,或降低锁的粒度
    例如:使用ThreadLocal避免加锁,修改概率小的场景使用乐观锁(自旋锁)
  5. IO异步化,长连接代替短连接
    例如采用NIO代替BIO,TCP连接代替HTTP连接,减少连接时的资源消耗
  6. SQL性能优化
    例如适当增加索引,查询参数数据类型与数据库一致
  7. 合理使用缓存,以空间换时间 例如,少量数据使用jvm缓存,大量数据使用分布式缓存,根际具体情况设计各级缓存,客户端、代理层、应用层、数据层都可以使用缓存。
  8. 逻辑正确
    避免死锁、死循环等危险操作
  • 系统架构优化
  1. 分布式系统,集群化
    实现横向扩展
  2. 应用分层,前后端分离
  3. 异步化设计
    例如使用MQ异步化,削峰排队处理
  4. 数据库读写分离
  5. 负载均衡
    采用有效的负载均衡策略
  6. 增加缓存设计
  7. 微服务化,坚持单一职责
  • 业务逻辑层面
  1. 用户重型操作分步化处理
    例如,订单提交时选择一个事先填好的收货地址
  2. 延迟加载无需马上使用的内容
    例如,商品页面先只显示一页商品,点击下一页看其他页商品
  3. 严重影响性能的需求要跟性能做一定折中取舍

About

系统性能优化指南

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published