文章头部背景

1.Go语言项目性能调优实践

1.Go语言项目性能调优实践

[TOC]

0x00 前言简述

在计算机性能调试领域里 profiling 是指对应用程序的画像,画像就是应用程序使用 CPU 和内存的情况。

Go语言是一个对性能特别看重的语言,所以其自带了 profiling 的库,本章将主要讲解怎么在 golang 中做 profiling。


Go语言项目中的性能优化主要有以下几个方面:
CPU profile:报告程序的 CPU 使用情况,按照一定频率去采集应用程序在 CPU 和寄存器上面的数据。
Memory Profile(Heap Profile):报告程序的内存使用情况。
Block Profiling:报告 goroutines 不在运行状态的情况,可以用来分析和查找死锁等性能瓶颈。
Goroutine Profiling:报告 goroutines 的使用情况,以及 goroutine调用关系。


Q: 那如何进行程序性能数据的采集?
Go语言内置了获取程序的运行数据的工具,包括以下两个标准库:

  • runtime/pprof:采集工具型应用运行数据进行分析
  • net/http/pprof:采集服务型应用运行时数据进行分析

Tips: 当pprof被引用开启后,每隔一段时间(10ms)就会收集下当前的堆栈信息,获取各个函数占用的CPU以及内存资源;最后通过对这些采样数据进行分析,形成一个性能分析报告。

Tips: 通常在我们进行性能测试时会与基准测试联用,找出程序最需要优化的点,【非常注意】我们只在进行性能测试的时候才在代码中引入pprof。


0x01 性能调试工具实践

1.工具型应用

描述: 如果你的应用程序是运行一段时间就结束退出类型。那么最好的办法是在应用退出的时候把 profiling 的报告保存到文件中,进行分析。对于这种情况可以使用runtime/pprof库。

首先在你测试的代码中导入runtime/pprof工具: import "runtime/pprof", 其主要包含了CPU 和 内存等性能分析。

CPU性能分析: 它会在应用执行结束后生成一个文件,保存了程序执行过程中的 CPU profiling 数据, 得到采样数据之后,我们可以使用go tool pprof工具进行CPU性能分析。

点击阅读完整原文

欢迎各位志同道合的朋友一起学习交流,如文章有误请在下方留下您宝贵的经验知识,个人邮箱地址【master#weiyigeek.top】或者个人公众号【WeiyiGeek】联系我。

更多文章来源于【WeiyiGeek Blog - 为了能到远方,脚下的每一步都不能少】, 个人首页地址( https://weiyigeek.top )

WeiyiGeek-banner

专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注、转个发、赞个助】,这将对我的肯定,我将持续整理发布更多优质原创文章!。


最后更新时间:
文章原始路径:_posts/编程世界/Go/Extension/1.Go语言项目性能调优实践.md
转载注明出处,原文地址:https://blog.weiyigeek.top/2020/4-26-605.html
本站文章内容遵循 知识共享 署名 - 非商业性 - 相同方式共享 4.0 国际协议
0 comments
Anonymous
Markdown is supported

Be the first person to leave a comment!

如果此篇文章对您有帮助,就请作者喝杯 Coffee ☕️☕️!

微信打赏二维码 支付宝打赏二维码

扫一扫,分享到微信

微信分享二维码

关注【全栈工程师修炼指南】

weiyigeek

欢迎添加【作者】微信

weiyigeek