青训营学习记录day5 | 青训营笔记

64 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第5天,开始的开始除了准备学习相关的知识,还要规划好每天的日程。

今天的收获主要是性能调优的实战。通过之前的课程,我们已经对Go语言有了些基础,同时也实际编写了应用程序。昨天的学习我收获了如何进行性能调优。

在介绍实际优化手段之前,我们先来了解下性能调优原则,指导我们更合理的进行性能优化。

在实际工作中,当服务规模比较小的时候,可能不会触发很多性能问题,同时性能优化带来的效果也不明显,很难体会到性能调优带来的收益而当业务量逐渐增大,比如一个服务使用了几千台机器的时候,性能优化一个百分点,就能节省数百台机器,成本降低是非常可观的。

既然性能调优前提是对应用程序性能表现有实际的数据指标,那么有什么工具能够获得这种数据呢?对于go程序,有一个很方便的工具就是pprof。

Golang是—门自带垃圾回收的语言,一般情况下内存泄露是没那么容易发生的,但是有—种例外: goroutine是很容易泄露的,进而会导致内存泄露。

评估手段建立后,它的产出是什么呢?实际是一个服务的性能指标分析报告。实际的压测报告截图,会统计压测期间服务的各项监控指标,包括qps,延迟等内容。

具体pprof有两种方式:

具体的工具—可以在runtime/pprof中找到源码,同时Golang的http标准库中也对pprof做了—些封装,能让你在http服务中直接使用它采样部分—它可以采样程序运行时的CPU、堆内存、goroutine、锁竞争、阻塞调用和系统线程的使用数据。

展示—用户可以通过列表、调用图、火焰图、源码、反汇编等视图去展示采集到的性能指标。方便分析。

介绍了五种使用pprof采集的常用性能指标:CPU、堆内存、Goroutine、锁竞争和阻塞两种展示方式:交互式终端和网页四种视图:Top、Graph、源码和火焰图。

pprof除了http的获取方式之外,也可以直接在运行时调用runtime/pprof包将指标数据输出到本地文件。视图中还有一个更底层的「反汇编」视图。