[后端与性能优化|青训营笔记]

96 阅读2分钟

这是我参与[第五届青训营]笔记创作活动的第3天。本文主要想对课堂上一些知识点进行记录总结。今天主要学习了性能调优。

一、本堂课重点内容

  1. 性能优化方面
  2. 性能优化工具
  3. 性能优化实战

二、详细知识点介绍:

1. 性能优化方面

性能优化需兼顾考虑时间和空间两方面因素,有时二者不可兼得。性能的表现需要用数据去进行说明 同时性能调优应遵循以下原则

  • 依靠数据而不是猜想
  • 定位最大瓶颈而不是细枝末节
  • 不要过早过度优化

Benchmark go自带的基准测试函数

func Benchmark(f func(b *B)) BenchmarkResult {
   b := &B{
      common: common{
         signal: make(chan bool),
         w:      discard{},
      },
      benchFunc: f,
      benchTime: benchTime,
   }
   if b.run1() {
      b.run()
   }
   return b.result
}

优化方向:

  1. slice预分配-避免额外分配
  2. copy代替re-slice-避免大内存未释放
  3. map预分配-减少内存拷贝和rehash销毁
  4. 拼接字符串时可使用strings.builder,性能上 +<strings.buffer<strings.builder
  5. 使用空结构体节省空间
  6. 适当使用atomic包

2. 性能优化工具

pprof工具

可用于获取应用在什么地方耗费了多少CPU、Memory,是一个用于可视化和分析性能分析数据的工具

  1. 采样 pprof支持对CPU、堆内存、携程、锁、阻塞、线程创建的采样

部分参数含义: CPU:

flat 当前函数本身执行耗时

flat% flat占CPU总时间比例

cum 函数本身加上其调用函数的总耗时

堆内存:

alloc_objects 程序累计申请的对象数

alloc_sqpce 程序累计申请的内存大小

inuse_space 程序当前占用的内存大小

  1. 展示 pprof支持top、调用图-Graph、火焰图-FlameGraph、Peek、源码-Source、反汇编-Disassemble
  2. 工具 pprof提供runtime/pprof和net/http/pprof工具
  3. 分析 pproof支持网页端和可视化终端的采样分析

性能优化实战

待补充