Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

这篇具有很好参考价值的文章主要介绍了Go性能调优及相关工具使用(四)——性能调优工具pprof的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、本次学习重点内容:

本堂课的知识要点有哪些?

1、性能发现工具pprof
2、性能调优案例

二、详细知识点介绍:

1、性能调优简介

性能调优原则:

要依靠数据不是猜测

定位最大瓶颈而不是细枝末节

不要过早优化

不要过度优化

2、性能发现工具pprof

说明:

1、希望知道应用在什么地方耗费了多少CPU、Memory

2、pprof是用于可视化和分析性能分析数据的工具

pprof 功能简介

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

3、pprof 排查实战

下载示例项目,GitHub地址:https://github.com/wolfogre/go-pprof-practice

项目提前埋入了许多炸弹代码,会产生许多可观测性能问题。

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

运行项目,浏览器输入网址:http://localhost:6060/debug/pprof/

看到界面到:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

CPU:
使用任务管理器:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

使用pprof工具:

**进入pprof:**go tool pprof “http://localhost:6060/debug/pprof/profile?seconds=10”

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

使用top命令查看CPU状态:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

相关含义:

可以清晰看到是那个函数消耗大量资源。

根据指定的正则表达式查找代码行:

命令:list

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

调用关系可视化:命令:web

这里输出图片相关格式需要先安装graphviz,graphviz安装地址如下

https://graphviz.org/download/

安装后检查环境变量:

dot -version

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

记住,安装时勾选创建环境变量,安装完成后重启Goland才能读取到最新的环境变量。

一定要重启Goland!!!!!

删除问题代码再次运行:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

Heap堆内存:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

进入可视化pprof:

命令:

go tool pprof -http=:8082 “http://localhost:6060/debug/pprof/heap”

浏览器输入:

localhost:8082

top视图:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

source视图:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

注释问题代码后:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

可以看到内存占用由85%降到68%

goroutine——协程
查看协程数:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

进入可视化pprof:

命令:

go tool pprof -http=:8082 “http://localhost:6060/debug/pprof/goroutine”

浏览器输入:

localhost:8082

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

火焰图查看

注:

由上到下表示调用顺序

每一块代表一个函数,越长代表占用CPU 的时间更长

火焰图是动态的,支持点击块进行分析

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

source视图:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

注释问题代码后:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

mutex——锁
查看锁数:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

进入可视化pprof:

命令:

go tool pprof -http=:8082 “http://localhost:6060/debug/pprof/mutex”

浏览器输入:

localhost:8082

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

source视图:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

注释问题代码后:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

block——阻塞
查看阻塞数:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

进入可视化pprof:

命令:

go tool pprof -http=:8082 “http://localhost:6060/debug/pprof/block”

浏览器输入:

localhost:8082

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

source视图:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

注释问题代码后:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

小结:

Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

4、性能调优案例

介绍实际业务服务性能优化的案例,对逻辑相对复杂的程序如何进行性能调优

分类:

业务服务优化

基础库优化

Go语言优化。

业务服务调优:
基本概念:

服务:能单独部署,承载一定功能的程序

依赖:Service A 的功能实现依赖Service B的响应结果,称为 Service A依赖 Service B

调用链路:能支持一个接口请求的相关服务集合及其相互之间的依赖关系

基础库:公共的工具包、中间件

流程

1、建立服务性能评估手段

2、分析性能数据,定位性能瓶颈

3、重点优化项改造

4、优化效果验证

建立服务性能评估手段

服务性能评估方式:

1、单独benchmark无法满足复杂逻辑分析

2、不同负载情况下性能表现差异

请求流量构造:

1、不同请求参数覆盖逻辑不同

2、线上真实流量情况

压测范围:

单机器压测、集群压测

性能数据采集:

单机性能数据、集群性能数据

基础库优化:

AB实验SDK的优化:

1、分析基础库核心逻辑和性能瓶颈

设计完善改造方案

数据按需获取

数据序列化协议优化

2、内部压测验证

3、推广业务服务落地验证

Go语言优化:

编译器&运行时优化:

1、优化内存分配策略

2、优化代码编译流程,生成更高效的程序

3、内部压测验证

4、推广业务服务落地验证

优点:

接入简单,只需要调整编译配置

通用性强

总结:

性能调优原则:

1、要依靠数据不是猜测性能分析工具 pprof

2、熟练使用pprof工具排查性能问题并了解其基本原理性能调优

3、保证正确性·定位主要瓶颈

三、个人总结:

​ 本次学习算是比较深入的了解了性能优化的相关知识。特别是见识到了pprof工具的强大,可以精准地定位问题代码,可视化地展示程序运行中CPU、内存、协程的资源的分配使用。后续的性能调优专业知识也讲的通俗易懂。文章来源地址https://www.toymoban.com/news/detail-475993.html

到了这里,关于Go性能调优及相关工具使用(四)——性能调优工具pprof的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Sparkthrift Server 启动命令调优及问题报错解决

    因为是测试命令,所以你需要和正式服务进行区别,不改变节点的情况下需要改变服务名称和服务端口。 命令解析: –name spark_sql_thriftserver2 指定服务名称为 spark_sql_thriftserver2 效果如图: –master yarn --deploy-mode client 指定 spark Job 提交的运行模式为 yarn-client。 提交至 yarn 的运

    2024年02月07日
    浏览(53)
  • Go-高质量编程与性能调优

    高质量编程: 什么是高质量: ​ ——编写代码能达到正确可靠,简洁清晰的目标 各种边界条件是否考虑完备 异常情况处理,稳定性保证 易读易维护 编程原则 简单性 消除“多余的复杂性”,以简单清晰的逻辑编写代码 不理解的代码无法修复改进 可读性 代码是写给人看的

    2024年02月15日
    浏览(43)
  • G1垃圾回收参数调优及MySQL虚引用造成GC时间过长分析

    我方有一应用,偶尔会出现GC时间过长(间隔约4小时),导致性能波动的问题(接口最长需要耗时3秒以上)。经排查为G1垃圾回收器参数配置不当 叠加 MySQL 链接超过闲置时间回收,产生大量的虚引用,导致G1在执行老年代混合GC,标记阶段耗时过长导致。以下为对此问题的分析

    2024年02月11日
    浏览(54)
  • Go 性能压测工具之wrk介绍与使用

    在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug;压力测试(压测)是确保系统在高负载情况下仍能稳定运行的重要步骤。通过模拟高并发场景,可以评估系统的性能瓶颈、可靠性和稳定性,进而优化系统架构和资源配

    2024年04月08日
    浏览(54)
  • SAP ABAP 代码调优检查工具及性能调优

    一:代码检查工具 ABAP 测试仪表盘(ATC) 所有检查工具, 豁免处理, 结果存储的中心 代码检查器 (SCI) 提供给客户,合作伙伴和SAP的做代码相关检查的开放式架构 扩展程序检查(SLIN) 扩展的代码检查,用来分析源代码 SAP NetWeaver 应用服务器,附加组件的代码漏洞分析器 安全漏洞的

    2024年02月10日
    浏览(44)
  • go 调试利器之pprof指标分析

    Go语言原生支持对于程序运行时重要指标或特征进行分析。pprof是其中一种重要的工具,其不仅可以分析程序运行时的错误(内存泄漏、并发冲突、协程泄漏等),也可以对程序进行优化(比如定位cpu,内存异常逻辑)。由于Go程序运行时不对外暴漏相关指标,因此Go提供了 ru

    2024年02月09日
    浏览(64)
  • go这么好用的pprof包却引发了安全漏洞?规避pprof自动注册默认url

    最近项目在线上被检测出有pprof有漏洞,原因是产品对外暴露的端口,可以通过http://ip:prot/debug/pprof/profile,获取到代码的堆栈信息,视为不安全的。 之所以pprof信息不安全,这要从go的 net/http/pprof 包的设计来讲。 pprof作为一个非常方便的性能检测工具,基本go服务都会默认开

    2024年01月19日
    浏览(86)
  • prometheus涉及pprof go信息泄露漏洞整改

    本文记录一下对系统渗透测试后反馈Prometheus涉及pprof go信息泄露,验证方法为http://ip:port/debug/pprof。为防止未经授权用户访问,现决定在Prometheus层面使用basic_auth加密整改。 软件 版本 Kylin V10 Docker 20.10.22 Prometheus 2.19.0 安装工具包并生成加密后密码 新建配置文件(暂时不使用

    2024年02月02日
    浏览(35)
  • 【Jvm】性能调优(上)线上问题排查工具汇总

    产品闭环 产品闭环是能够让 用户主动迭代促进产品发展的方式 。例如一些内容产品,比如 糗事百科 ,种子用户 产出高质量内容 ,举报与赞起到 筛选内容 ,提高内容质量的作用, 内容质量的提升有助于吸引更多用户 。 这就是产品闭环, 产品给予用户需求解决方法,用户

    2024年02月20日
    浏览(49)
  • PHP调优策略和性能测试工具的详细解析 - 大规模网站性能优化

    当面临大规模网站性能优化时,对PHP进行调优是至关重要的。这涉及到评估现有系统的性能瓶颈,并采取适当的策略来提高网站的响应速度和吞吐量。本文将深入探讨PHP调优的策略,以及可用于性能测试的工具。 使用缓存 :合理使用缓存可以减少数据库查询和计算操作,提

    2024年02月12日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包