非零基础自学Golang 第15章 Go命令行工具 15.6 性能分析 15.6.2 通过文件方式 15.6.3 通过HTTP方式 15.7 小结

news2024/11/15 3:23:46

非零基础自学Golang

文章目录

      • 非零基础自学Golang
      • 第15章 Go命令行工具
        • 15.6 性能分析
          • 15.6.2 通过文件方式
          • 15.6.3 通过HTTP方式
        • 15.7 小结

第15章 Go命令行工具

15.6 性能分析

15.6.2 通过文件方式

为了能分析Go程序的性能,我们需要在程序中导入runtime/pprof来生成性能分析所需要的profile文件。

pprof包提供了StartCPUProfile(w io.Writer)接口来输出CPU性能参数到文件中。

如下是针对CPU的性能参数获取代码:

f, _ := os.Create("cpu_file.prof")

// 开始cpu profile,结果写到文件f中
pprof.StartCPUProfile(f)

// 结束profile
defer pprof.StopCPUProfile()

对于内存堆栈可以使用pprof包的WriteHeapProfile(w io.Writer)接口,用法和StartCPUProfile类似,这里就不举例了。

[ 动手写15.6.1 ]

package main

import (
   "fmt"
   "os"
   "runtime/pprof"
)

const Num int = 10000

func main() {

   f, _ := os.Create("cpu_file.prof")

   // 开始cpu profile, 结果写到文件f 中
   pprof.StartCPUProfile(f)

   // 结束profile
   defer pprof.StopCPUProfile()

   var str string
   for i := 0; i < Num; i++ {

      str = fmt.Sprintf("%s%d", str, i)
   }
}

运行动手写15.6.1后会在当前路径下生成cpu_file.prof文件,

在这里插入图片描述

这时我们就可使用go tool pprof + cpu.prof工具对整个文件进行性能分析。

> go tool pprof cpu_file.prof

在这里插入图片描述

top命令的作用是输出最耗时的十处代码,可以发现runtime.procyield操作最耗时,由于这个函数是标准库runtime中的代码,我们无法对其进行代码优化,这时我们可以对main.main进行分析,使用list命令就可以查看费时的代码在哪一行。

list main.main

在这里插入图片描述

分析得知第24行代码fmt.Sprintf耗时最多,花费了20 ms,我们就可以针对这里的逻辑进行优化,使用其他方式的字符串连接。

不仅如此,我们还可以使用web命令来查看图形界面的程序执行流程,

在这里插入图片描述

当然这个东西在不同的机器上 跑结果可能不一样,毕竟都是 性能分析了,所以知道咋用 就OK了

15.6.3 通过HTTP方式

通过文件的方式我们可以对大部分cli程序进行性能分析,但如果是Web程序,上述方法就有点捉襟见肘了。

Go语言给我们提供了另一个针对Web程序的实时性能分析方式,只需要使用匿名导入的方式引入如下包并启动HTTP服务器即可。

import _ "net/http/pprof"

[ 动手写 15.6.2 ]

package main

import (
   "fmt"
   "log"
   "net/http"
   _ "net/http/pprof"
)

const Num int = 10000

func concat_str(writer http.ResponseWriter, request *http.Request) {

   var str string

   for i := 0; i < Num; i++ {
      str = fmt.Sprintf("%s%d", str, i)
   }
}

func main() {

   http.HandleFunc("/str", concat_str)
   log.Fatal(http.ListenAndServe(":8080", nil))
}

动手写15.6.2在本地127.0.0.1的8080端口开启了一个HTTP服务器,并注册了一个/str路由,

在这里插入图片描述

浏览器只要访问http:// 127.0.0.1:8080/str,就会执行concat_str函数。

在这里插入图片描述

由于我们导入了net/http/pprof包,在浏览器访问如下地址,就可以看到相关的性能参数。

http://127.0.0.1:8080/debug/pprof

在这里插入图片描述

使用如下命令对CPU性能进行分析:

go tool pprof http://127.0.0.1:8080/debug/pprof/profile?seconds=5

pprof工具会等待5秒,持续获取这5秒内的CPU运行状况,默认seconds参数为30秒,运行后就需要在这5秒内持续访问http:// 127.0.0.1:8080/str来获取concat_str的CPU性能参数。

在这里插入图片描述

至此,分析性能的方式和通过文件的方式一致。

15.7 小结

  • go run/build可以方便我们构建系统,计算文件的依赖关系,然后调用编译器、汇编器和连接器构建程序。
  • go get/install可以获取安装远程代码,方便包管理。
  • go fmt能以Go语言编码标准来格式化我们写的代码。
  • go doc可以从注释中生成文档并展示出来。
  • go test可用来进行代码测试、覆盖率测试。
  • go tool pprof可用来对程序进行性能测试。
  • 熟练掌握Go语言工具能很大程度地提高我们的编码效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108301.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

飞鹤揭榜“十四五”项目,牵头研制新一代婴配粉

12月22日&#xff0c;在“鲜萃活性营养&#xff0c;更适合中国宝宝体质”中国飞鹤60周年战略升级发布会上&#xff0c;飞鹤对外公布&#xff0c;其牵头申报的——“基于中国母乳研究的新一代婴配乳粉制造技术研究与示范”项目成功获批。 这是继去年飞鹤与江南大学、大连工业大…

大数据基础平台搭建-(二)Hadoop集群搭建

大数据基础平台搭建-&#xff08;二&#xff09;Hadoop集群搭建 大数据平台系列文章&#xff1a; 1、大数据基础平台搭建-&#xff08;一&#xff09;基础环境准备 2、大数据基础平台搭建-&#xff08;二&#xff09;Hadoop集群搭建 大数据平台是基于Apache Hadoop_3.3.4搭建的…

不同存储资源的应用场景及优缺点介绍

容器应用应当根据应用系统的特点&#xff0c;综合考虑容器应用对存储类型、存储性能及数据高可用等方面的要求&#xff0c;选择最适合的存储资源类型。常见的存储资源应用场景包括三类&#xff1a;将存储挂载在外部宿主机上、将存储放置于容器内部和使用外部共享存储。下面对每…

MySQL面试常问问题(数据库架构+存储引擎) —— 赶快收藏

目录 1.说说 MySQL 的基础架构? 2.一条 SQL 查询语句在 MySQL 中如何执行的&#xff1f; 3.MySQL有哪些常见存储引擎&#xff1f; 4.那存储引擎应该怎么选择&#xff1f; 5.InnoDB和MylSAM主要有什么区别&#xff1f; 1.说说 MySQL 的基础架构? MySQL逻辑架构图主要分三…

浅谈古建筑电气火灾成因及防控对策

摘要: 我国古建筑多为砖木结构&#xff0c;当发生火灾事故时具有蔓延快、扑救难的特点&#xff0c;而火灾对古建筑的损害性很大&#xff0c;电气火灾事故在我国火灾事故中比重居高不下。本文通过对古建筑电气火灾成因进行分析&#xff0c;有针对性地提出了古建筑电气火灾防控对…

Java工厂企业工艺管理系统源码 springboot2+vue2前后端分离架构 工艺路线 加工工序管理源码

工艺系统是对车间现场加工工序的管理&#xff0c;根据生产成品或者半成品的工单&#xff0c;以及产品标准工艺路线&#xff0c;系统可以自动生成产品工序加工命令 并且可以根据实际情况再进行工序调整.系统可以根据每道工序&#xff0c;打印工序派工单。工序之间物料转移&#…

【推荐】华为顶级认证HCIE-RS培训教材全套合集

HCIE是华为认证系统中的专家级认证。候选人必须通过笔试&#xff0c;LAB考试和面试&#xff0c;才能最终获得HCIE认证。困难还从另一方面解释了证书的含金量。 该认证具有很高的含金量和行业认可度。此外&#xff0c;获得HCIE证书的工程师将优先获得华为和华为合作伙伴的聘用&a…

Struts2中的数据校验

Struts2中的数据校验1、Action控制器2、jsp页面3、struts.xml配置4、测试1、Action控制器 如果要使用校验&#xff0c;则需要继承ActionSupport类&#xff0c;覆写validate()方法&#xff0c;如果是实现Action接口&#xff0c;则无法覆写此方法。直接在之前的控制器基础上进行…

Spring 中使用Nacos配置管理

添加依赖 <dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-spring-context</artifactId><version>${latest.version}</version> </dependency>本文使用的版本为&#xff1a;1.1.1 注&#xff1a;我们在N…

【nowcoder】笔试强训Day1

目录 一、选择题 二、编程题 2.1组队竞赛 2.2删除公共字符串 一、选择题 1.在 Java 中&#xff0c;存放字符串常量的对象属于&#xff08; &#xff09;类对象。 A Character B String C StringBuffer D Vector 字符串分为两大类&#xff0c;一类是字符串常量&#xf…

ESLint + StyleLint + Prettier + VSCode 打造最优雅的前端开发体验

ESLint StyleLint Prettier VSCode 打造最优雅的前端开发体验 引言 对于一个成熟的前端团队&#xff0c;统一的编码规范和提交规范尤其重要。要保证秩序井然、风格统一、整齐有序&#xff0c;光把规范写在文档里是没有太多实际价值的。没有人愿意去一条一条看规则&#xff…

ovn:中央节点ip变更导致节点失联

1.当ovn的中央节点ip突然变更&#xff08;从3.197->1.114&#xff09;后&#xff0c;便再无法同节点之间进行信息的同步。 2.已将节点的ovn-remote变更到最新的中央节点ip 3.但是进行ovn-controller 检测时却显示失败 4.通过telnet 测试6642 端口失败 5.最后发现原来是中央…

【UE4 第一人称射击游戏】05-设置角色动画

素材资料地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1epyD62jpOZg-o4NjWEjiyg 密码&#xff1a;jlhr 步骤&#xff1a; 1.新建一个名为“Character”的文件夹 将Swat.fbx导入Character文件夹中 新建一个名为“Animation”的文件夹 将Animation文件夹内的所…

大数据基础平台搭建-(一)基础环境准备

大数据基础平台搭建-&#xff08;一&#xff09;基础环境准备 大数据平台系列文章&#xff1a; 1、大数据基础平台搭建-&#xff08;一&#xff09;基础环境准备 2、大数据基础平台搭建-&#xff08;二&#xff09;Hadoop集群搭建 目录大数据基础平台搭建-&#xff08;一&#…

docker安装minio集群

docker安装minio集群 文章目录docker安装minio集群1、所有节点配置主机名解析2、配置时间同步&#xff0c;关闭防火墙和selinux。3、所有节点安装docker4、部署minio集群&#xff0c;3个节点每个节点挂载2个目录10.20.138.5210.20.138.5310.20.138.545、访问任意节点的9000端口…

vm vh移动端布局及 bilibili官网移动端首页布局

vm和vh是啥&#xff1f; 市场上的移动端大多数为flex布局&#xff0c;此时我们用到了rem这个单位&#xff0c;但是rem需要媒体查询&#xff0c;要根据页面是尺寸进行修改&#xff0c;而vm/vh省去各种判断和修改&#xff0c;像B站就通过vue和vm写的。 vm/vh是一个相对单位&…

【Quarkus技术系列】「云原生架构实战」配置参考指南相关的功能机制配置介绍分析

回顾Quarkus介绍 Quarkus的概念定义 Quarkus是一个为Java虚拟机&#xff08;JVM&#xff09;和原生编译而设计的全堆栈 Kubernetes 原生 Java 框架&#xff0c;用于专门针对容器优化 Java&#xff0c;并使其成为无服务器、云和 Kubernetes 环境的高效平台。 Quarkus与框架整…

Spring Boot整合分布式搜索引擎ElasticSearch 实现相关操作

一、ElasticSearch 介绍 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性&#xff0c;能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步…

VS Code 中的增强 code CLI

Visual Studio Code 的核心是一个代码编辑器&#xff0c;它通过我们的远程开发经验与其他环境集成&#xff0c;变得更加强大和灵活。 你可能不知道的是&#xff0c;VS Code 有一个内置的命令行界面(CLI)&#xff0c;可以让你控制启动和管理编辑器的方式——你可以通过命令行选项…

【图像处理】基于二维FIR的特定角度边缘检测(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…