性能调优怎么做

本文阅读 3 分钟
首页 golang 正文
题目来源:腾讯

答案:树枝

1.首先要了解调优的基本思路

1.对外接口协议不能改变
2.了解需求和代码演进过程
3.确定资源消耗类型
4.控制运算数据输入量
5.提高 CPU 利用率
6.提高缓存命中率

2.使用pprof查看程序的CUP火焰图,CUP调用关系、CUP调用关系、查看goroutine情况

使用命令行go tool pprof开启pprof

  • CPU火焰图

  • CUP调用关系

  • CUP调用关系

    • go tool pprof  http://127.0.0.1:8090/debug/pprof/heap
  • 查看goroutine情况

3. 常见的性能优化点

  1. 【CPU】去除不必要的序列化/反序列化 :标准的json库非常耗性能,可以考虑使用其他库,更好的是使用grpc。
  2. 【CPU】线程泄露:goroutine飞出去以后忘了stop/close,尤其是time.ticker之类的定时器。
  3. 【CPU】盲目开启过多goroutine:goroutine能控制就控制一下,开几百个非阻塞的goroutine会导致调度消耗过多CPU。
  4. 【MEM】减少GC:举例来说,字符串(string)传递都是值拷贝,如果数据量大,会产生大量gc,此时完全可以用byte数组来代替。高阶一点就是使用sync.Pool来做一个池子,自己处理内存复用和回收的工作,避免GC。Java在这一块做的很成熟,有新生代和老年代的概念,golang还没有那么完善。
  5. 【MEM】内存预分配:golang的slice很好用,但是底层是数组,如果空间能确定就先确定下来,以免append的时候空间不够导致不停的copy数据来扩大数组大小。
  6. 【DISK】减少磁盘随机读写IO:SATA盘的理论最大读写在300MB/s,磁盘寻道就要10ms,如果大量随机读写,哪怕1kb数据读写,也要10ms,时间就主要花在寻道上。
  7. 【NET】新服务的话,尽量使用grpc代替http。
本文来自投稿,不代表本站立场,如若转载,请注明出处:
了解中间件吗?有什么好处?
« 上一篇 09-17
Go 高并发的特点
下一篇 » 09-17

发表评论

发表评论